C# WebSocket-如何创建不同的消息?
我正在创建一个websocket聊天应用程序,并设法将聊天信息中继到连接的其他浏览器。我有一个控制台应用程序监听一个端口 我的问题是。。。如果一个人登录到这个系统,我想让每个人都知道,我该怎么做?我正在使用Linq映射数据库,但如果日志记录正常,那么如何发送该消息,即用户X已登录 最后,我使用websockets创建了一个聊天室,这里是最终产品,感谢您的介绍C# WebSocket-如何创建不同的消息?,c#,asp.net,websocket,C#,Asp.net,Websocket,我正在创建一个websocket聊天应用程序,并设法将聊天信息中继到连接的其他浏览器。我有一个控制台应用程序监听一个端口 我的问题是。。。如果一个人登录到这个系统,我想让每个人都知道,我该怎么做?我正在使用Linq映射数据库,但如果日志记录正常,那么如何发送该消息,即用户X已登录 最后,我使用websockets创建了一个聊天室,这里是最终产品,感谢您的介绍 您需要在应用程序级别跟踪连接,以便发送到所有连接。但看看WebSocket和长轮询的大量工作是为您编写的。使用SignalR,您可以使用G
您需要在应用程序级别跟踪连接,以便发送到所有连接。但看看WebSocket和长轮询的大量工作是为您编写的。使用SignalR,您可以使用
GetClients
将所有客户端连接到集线器
,您需要在应用程序级别跟踪连接,以便发送到所有客户端。但看看WebSocket和长轮询的大量工作是为您编写的。使用SignalR,当使用PostgreSQL时,您可以使用GetClients
将所有客户端连接到Hub上,您可以使用数据库中的NOTIFY来通知应用层,应用层可以生成通过WebSocket发送的消息。当使用PostgreSQL时,您可以使用数据库中的NOTIFY来通知应用程序层,应用程序层可以生成通过WebSocket发送的消息。首先确保您以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;
}
}
}
公共类ChatHandler:WebSocketHandler
{
私有JavaScriptSerializer serializer=新JavaScriptSerializer();
私有静态WebSocketCollection chatapp=新WebSocketCollection();
公共覆盖无效消息(字符串消息)
{
var m=序列化程序。反序列化(消息);
开关(m型)
{
case MessageType.NewUser:
chatapp.Broadcast(序列化程序)序列化(新
{
type=“newUser”,
username=m.username
}));
打破
案例消息类型。消息:
chatapp.Broadcast(序列化程序)序列化(新
{
type=“message”,
message=m.message
}));
打破
违约:
回来
}
}
}
正如Hightechrider所说,您需要跟踪已连接客户端的列表,这就是上面代码列表中的WebSocketCollection
class所做的
在github上查看Paul Batum的WebSocket聊天示例()
他还在最近的MS BUILD会议上做了一个演示()首先确保您以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;
}
}
}
公共类ChatHandler:WebSocketHandler
{
私有JavaScriptSerializer serializer=新JavaScriptSerializer();
私有静态WebSocketCollection chatapp=新WebSocketCollection();
公共覆盖无效消息(字符串消息)
{
var m=序列化程序。反序列化(消息);
开关(m型)
{
case MessageType.NewUser:
chatapp.Broadcast(序列化程序)序列化(新
{
type=“newUser”,
username=m.username
}));
打破
案例消息类型。消息:
chatapp.Broadcast(序列化程序)序列化(新
{
type=“message”,
message=m.message
}));
打破
违约:
回来
}
}
}
正如Hightechrider所说,您需要跟踪已连接客户端的列表,这就是上面代码列表中的WebSocketCollection
class所做的
在github上查看Paul Batum的WebSocket聊天示例()
他还在最近的MS BUILD大会上做了一个演讲()Iron!这正是我所需要的!非常感谢你为我指明了正确的方向!我将尝试实施这种方法!这是我的论文!如果我有任何疑问,我可以在这里问你吗?提前谢谢你,伙计!铁这正是我所需要的!非常感谢你为我指明了正确的方向!我将尝试实施这种方法!这是我的论文!如果我有任何疑问,我可以在这里问你吗?提前谢谢你,伙计!