以下代码创建了一个websocket服务端,如果要发消息到网页,应该怎样写发送呢?
var host = WebSocketHostBuilder.Create()
.ConfigureAppConfiguration((hostContext, config) =>
{
config.AddInMemoryCollection(new Dictionary<string, string>
{
{ "serverOptions:listeners:0:ip", "Any" },
{ "serverOptions:listeners:0:port", "9090" }
});
})
.UseWebSocketMessageHandler(async (session, msg) =>
{
// 接收消息
Console.WriteLine(msg.Message);
try
{
// 服务器中转
string[] msgs = msg.Message.Split("|");
}
catch { }
})
.UseSessionHandler(async session =>
{
// 知道是谁连进来
Sessions.Add((WebSocketSession)session);
})
.Build();
await host.RunAsync();
在WebSocket服务端代码中,要向网页发送消息,可以使用WebSocket连接对象(即WebSocketSession
)的SendMessageAsync
方法来发送消息。在WebSocket服务端代码的适当位置,调用SendMessageAsync
方法即可将消息发送到网页上。
在上面的代码中,我们可以在UseWebSocketMessageHandler
的委托中添加发送消息的逻辑。首先,将消息接收的部分保留不变:
.UseWebSocketMessageHandler(async (session, msg) =>
{
// 接收消息
Console.WriteLine(msg.Message);
try
{
// 服务器中转
string[] msgs = msg.Message.Split("|");
// ...处理消息中转逻辑
}
catch { }
})
接下来,在接收消息的代码块中添加发送消息的逻辑。假设我们想要将接收到的消息原封不动地发送回给网页,可以按照以下方式完成:
.UseWebSocketMessageHandler(async (session, msg) =>
{
// 接收消息
Console.WriteLine(msg.Message);
try
{
// 服务器中转
string[] msgs = msg.Message.Split("|");
// ...处理消息中转逻辑
// 发送消息回网页
await session.SendMessageAsync(msg.Message);
}
catch { }
})
以上代码在处理完消息中转逻辑后,通过await session.SendMessageAsync(msg.Message)
将原始消息回传给网页。
需要注意的是,网页端需要有WebSocket的连接来接收这些消息。在网页端,可以通过JavaScript创建WebSocket连接,并在连接打开时注册消息接收的处理函数,来实现消息的接收和处理。
示例网页端代码如下:
<!DOCTYPE html>
<html>
<head>
<title>WebSocket Example</title>
</head>
<body>
<div id="messages"></div>
<script>
const ws = new WebSocket("ws://localhost:9090");
ws.onopen = function(event) {
console.log("WebSocket connection established.");
};
ws.onmessage = function(event) {
const messagesDiv = document.getElementById("messages");
messagesDiv.innerHTML += "<p>" + event.data + "</p>";
};
ws.onclose = function(event) {
console.log("WebSocket connection closed.");
};
</script>
</body>
</html>
在上述网页代码中,我们使用JavaScript创建了WebSocket连接,并在连接打开时注册了消息接收的处理函数,当收到服务器发送的消息时,将消息显示在<div id="messages"></div>
元素中。
这样,当WebSocket服务端收到消息后,会将消息原封不动地发送回给网页,网页端就可以接收并显示收到的消息了。
【以下回答由 ChatGPT 生成】
var host = WebSocketHostBuilder.Create()
.ConfigureAppConfiguration((hostContext, config) =>
{
config.AddInMemoryCollection(new Dictionary<string, string>
{
{ "serverOptions:listeners:0:ip", "Any" },
{ "serverOptions:listeners:0:port", "9090" }
});
})
.UseWebSocketMessageHandler(async (session, msg) =>
{
// 接收消息
Console.WriteLine(msg.Message);
try
{
// 服务器中转
string[] msgs = msg.Message.Split("|");
// 发送消息到网页
var webSocketSession = (WebSocketSession)session;
await webSocketSession.SendAsync("Hello, world!");
}
catch { }
})
.UseSessionHandler(async session =>
{
// 知道是谁连进来
var webSocketSession = (WebSocketSession)session;
Sessions.Add(webSocketSession);
})
.Build();
await host.RunAsync();
以上代码修改了原始代码,以便在WebSocket服务端接收消息后发送消息到网页。具体修改包括以下几点:
将msg.Message
的内容按照"|”进行 split 获得消息数组 msgs
。
获取到当前 session 对象后,使用 ((WebSocketSession)session)
进行类型转换,并将其存储到 webSocketSession
变量中。
使用 await webSocketSession.SendAsync("Hello, world!")
将消息 Hello, world!
发送到网页。
请注意,以上示例代码仅供参考,具体实现还需要根据具体情况进行修改。
【相关推荐】