websocket服务器

博客介绍了WebSocket协议,它是基于TCP的新型网络协议,实现了浏览器与服务器的全双工通信,允许服务器主动向客户端发送信息,而HTTP协议只能由客户端发起请求,还给出了优化代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、WebSocket协议是基于tcp协议的一种新型的网络协议。它的实现了浏览器与服务器全双工通信-----允许服务器主动发送信息给客户端

2、http协议通信只能有客户端发送请求

服务端:

$server = new Swoole\WebSocket\Server("0.0.0.0", 9501);

$server->on('open', function (Swoole\WebSocket\Server $server, $request) {
    echo "server: handshake success with fd{$request->fd}\n";
});

$server->on('message', function (Swoole\WebSocket\Server $server, $frame) {
    echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
    $server->push($frame->fd, "this is server");
});

$server->on('close', function ($ser, $fd) {
    echo "client {$fd} closed\n";
});

$server->start();

客户端:

<h1>swooler-websocket测试</h1>
<script>
    var wsurl = "域名:端口号";
    var websocket = new WebSocket(weurl);
//实例对象onopen属性
websocket.ononnpen  = function(evt){
    console.log("connected-swoole-connect");
}
websocket.onmessage = function (evt){
    console.log("server-return-data:"+etv,data);
}
websocket.onclose = functin(evt){
      console.log("close");
}
websocket.onerror = function(evt,e){
console.log("server-error"_etv.data);
}
</script>

 优化的代码:

<?php
class websocket
{
    CONST PORT = 8812;
    CONST HOST = 0.0.0.0;
    public $ws = '';
    public function __construct()
    {
        $this->ws = new swoole_websocket_server('0.0.0.0',8812);
     $this->ws->set([
      'work_num'=>2,
      'task_worker_num'=>4
    ]);
//可以看swoole文档,websocketserver $this->ws->on("open",[$this,'onOpen']); $this->ws->on('message',[$this,'onMessage']); $this->ws->on('close',[$this,onclose]); $this->ws->on('task',[$this,onTask]); $this->ws->on('finish',[$this,onFinish]); $this->ws->start(); } /* * 监听ws连接事件 */ public function onOpen($ws,$request) { //客户端ID var_dump($request->fd); } public function onMessage($ws,$frame) { echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n"; $data = [ 'task'=>1, 'frame'=>$frame->fd ]; $ws->task($data); //返回给客户端一个数据 $ws->push($frame->fd, "this is server"); } /* *$task_id是任务ID,由swoole扩展内自动生成,用于区分不同的任务。$task_*id和$src_worker_id组合起来才是全局唯一的,不同的worker进程投递的任ID*可能会有相同 *$src_worker_id来自于哪个worker进程 *$data 是任务的内容, task 任务异步机制,可以用于一个非常耗时的任务,异步执行 */ public function onTask($ws, $task_id, $src_worker_id, $data) { sleep(10); return "task finish"; } /* *$task_id是任务的ID *$data是任务处理的结果内容 *task进程的onTask事件中没有调用finish方法或者return结果,worker进程 *不会触发onFinish *执行onFinish逻辑的worker进程与下发task任务的worker进程是同一个进程 */ public function onFinish($ws, $task_id, $data) { echo "task_id:{$task_id}"; echo "finish_success:{$data}"; } public function onClose($ws,$fd) { echo "client {$fd} closed\n"; } } $obj = new websocket();

 

转载于:https://www.cnblogs.com/hanmengya/p/10936317.html

### 如何搭建和配置 WebSocket 服务器 #### 使用 Node.js 搭建 WebSocket 服务器 Node.js 提供了一种快速简便的方式来创建 WebSocket 服务器。以下是具体方法: 1. **安装依赖** 需要先初始化项目并安装 `ws` 库,这是一个流行的 WebSocket 实现库。可以通过以下命令完成: ```bash npm init -y npm install ws ``` 2. **编写服务器代码** 创建一个 JavaScript 文件(如 `server.js`),并将以下代码粘贴进去: ```javascript const WebSocket = require('ws'); // 创建 WebSocket 服务器实例 const wss = new WebSocket.Server({ port: 8080 }); // 当有新连接时触发事件 wss.on('connection', (ws) => { console.log('客户端已连接'); // 接收消息时触发事件 ws.on('message', (message) => { console.log(`收到消息 -> ${message}`); // 将接收到的消息广播到所有客户端 wss.clients.forEach((client) => { if (client.readyState === WebSocket.OPEN) { client.send(message); } }); }); // 客户端断开连接时触发事件 ws.on('close', () => { console.log('客户端已断开'); }); }); console.log('WebSocket 服务器正在运行于 ws://localhost:8080/'); ``` 3. **启动服务器** 运行以下命令来启动 WebSocket 服务器: ```bash node server.js ``` 此时,WebSocket 服务器已经成功部署,并监听在 `ws://localhost:8080/` 上[^4]。 --- #### 基于 Spring Boot 的 Java WebSocket 服务器 如果倾向于使用 Java 和 Spring Boot 来构建 WebSocket 服务器,则可以按照以下步骤操作: 1. **引入依赖** 在项目的 `pom.xml` 中添加 WebSocket 支持的相关依赖项: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 2. **配置类** 编写一个配置类以启用 WebSocket 功能: ```java package com.example.websocket; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.server.standard.ServerEndpointExporter; @Configuration public class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } } ``` 3. **定义 WebSocket 处理逻辑** 创建一个处理 WebSocket 请求的类: ```java package com.example.websocket; import javax.websocket.OnClose; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; import java.io.IOException; @ServerEndpoint("/websocket") public class MyWebSocketHandler { @OnOpen public void onOpen(Session session) { System.out.println("新的客户端已连接"); } @OnMessage public void onMessage(String message, Session session) throws IOException { System.out.println("收到消息:" + message); session.getBasicRemote().sendText("Echo: " + message); } @OnClose public void onClose() { System.out.println("客户端已断开连接"); } } ``` 4. **启动应用** 启动 Spring Boot 应用程序后,WebSocket 服务将在指定路径上可用,例如 `/websocket`[^3]。 --- #### Android 平台上的 WebSocket 服务器 对于移动开发人员来说,在 Android 设备上也可以轻松实现 WebSocket 服务器功能。推荐使用第三方库 `Java-WebSocket` 或者框架工具包 `AndServer` 结合 HTTP 和 WebSocket 协议支持。 1. 添加 Maven 仓库地址以及对应版本号至 build.gradle 文件中; 2. 初始化 WebSocket 对象并通过绑定 IP 地址与端口号开启监听模式; 3. 设置回调函数用于接收来自外部设备的数据流传输过程中的交互行为管理[^2]。 --- #### 性能对比与其他注意事项 相比于传统的轮询机制,WebSocket 技术显著减少了不必要的网络请求次数及其带来的额外负载压力,从而提升了整体性能表现水平[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值