WebSockets -如何创建不同的消息
本文关键字:消息 创建 何创建 WebSockets | 更新日期: 2023-09-27 18:09:30
我正在创建一个websocket聊天应用程序,我设法将聊天消息中继到其他连接的浏览器。我有一个控制台应用程序监听一个端口。
我的问题是……如果一个人登录了系统,我想让所有人都知道,我该怎么做?我正在使用Linq来映射DB,但如果日志记录是好的,我如何发送该消息,该用户X已登录?最后我能够使用websockets创建一个聊天室,这是最终产品,感谢导向!
http://ukchatpoint.no-ip.org/Chatpoint/Pages/Uklobby.aspx首先确保你以JSON (JavaScript对象表示法)发送消息,因为这允许结构化数据来回发送,并且客户端&服务器可以区分聊天信息和指令(例如某人新登录)。例如在客户端:
mySocket.onmessage = function(event) {
var command = JSON.parse(event.data);
if(command.type === 'message') {
var message = command.message;
// handle chat message
}
else if (command.type === 'newUser') {
var username = command.username;
// handle new user
}
};
在ASP的服务器上。NET c#,你会把它们发送为:
public class ChatHandler : WebSocketHandler
{
private JavaScriptSerializer serializer = new JavaScriptSerializer();
private static WebSocketCollection chatapp = new WebSocketCollection();
public override void OnMessage(string message)
{
var m = serializer.Deserialize<Message>(message);
switch (m.Type)
{
case MessageType.NewUser:
chatapp.Broadcast(serializer.Serialize(new
{
type = "newUser",
username = m.username
}));
break;
case MessageType.Message:
chatapp.Broadcast(serializer.Serialize(new
{
type = "message",
message = m.message
}));
break;
default:
return;
}
}
}
正如Hightechrider所说,您需要跟踪连接的客户端列表,这就是上面代码清单中的WebSocketCollection
类所做的。
查看Paul Batum在github上的WebSocket聊天示例(https://github.com/paulbatum/BUILD-2011-WebSocket-Chat-Samples/blob/master/BasicAspNetChat/ChatHandler.cs)
他还在最近的微软BUILD大会上做了演讲(http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-807T)
您需要在应用程序级别跟踪连接,以便您可以向所有这些连接发送消息。但是看看SignalR,它为你编写了很多与webSockets和长轮询相关的工作。使用SignalR,您可以使用GetClients
将所有客户端连接到Hub
。
当使用PostgreSQL时,你可以在数据库中使用NOTIFY来通知应用层,它可以通过WebSockets生成消息。