365读书网-读万卷书行万里路

365读书网-读万卷书行万里路

websocket怎么主动从服务端发送信息?

59

在WebSocket通信中,服务端可以通过以下几种方式主动发送信息给客户端:

使用`socket.send()`方法

一旦WebSocket连接成功,服务端可以获得一个客户端的`socket`对象。

当需要发送数据时,可以直接调用`socket.send()`方法将数据发送给客户端。需要注意的是,这个`socket`对象必须保持有效状态。

在.NET Core中使用`WebSocket.SendAsync()`方法

在.NET Core中,可以使用`WebSocket`类的`SendAsync`方法向客户端发送消息。

示例代码如下:

```csharp

WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync();

ArraySegment buffer = new ArraySegment(Encoding.UTF8.GetBytes("Hello World!"));

await webSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);

```

使用Python的websockets库

利用Python的`websockets`库,可以轻松构建一个支持WebSocket推送的HTTP服务器。

示例代码如下:

```python

import asyncio

import websockets

async def handler(websocket, path):

while True:

await websocket.send("Hello from server!")

await asyncio.sleep(1)

start_server = websockets.serve(handler, "localhost", 8765)

asyncio.get_event_loop().run_until_complete(start_server)

asyncio.get_event_loop().run_forever()

```

在Spring Boot中集成WebSocket

Spring Boot已经对WebSocket技术实现了自动配置和版本管理,只需导入相关标签即可。

在后端工具类中,可以创建一个WebSocketServer类来记录连接的客户端,并处理客户端发来的数据和往客户端发送数据。

示例代码如下:

```java

@Component

@ServerEndpoint(value = "/websocket/{id}")

public class WebSocketServer {

private static int onlineCount = 0;

private static ConcurrentHashMap webSocketSet = new ConcurrentHashMap<>();

@OnOpen

public void onOpen(@PathParam(value = "id") String id, Session session) {

this.session = session;

this.id = id;

webSocketSet.put(id, this);

}

public void sendMessage(String message) {

for (WebSocketServer ws : webSocketSet.values()) {

ws.session.getAsyncRemote().sendText(message);

}

}

}

```

通过以上几种方法,服务端可以在WebSocket连接建立后,根据需要主动发送信息给客户端。选择哪种方法取决于具体的应用场景和使用的编程语言。