Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebSocket-如何创建不同的消息?_C#_Asp.net_Websocket - Fatal编程技术网

C# WebSocket-如何创建不同的消息?

C# WebSocket-如何创建不同的消息?,c#,asp.net,websocket,C#,Asp.net,Websocket,我正在创建一个websocket聊天应用程序,并设法将聊天信息中继到连接的其他浏览器。我有一个控制台应用程序监听一个端口 我的问题是。。。如果一个人登录到这个系统,我想让每个人都知道,我该怎么做?我正在使用Linq映射数据库,但如果日志记录正常,那么如何发送该消息,即用户X已登录 最后,我使用websockets创建了一个聊天室,这里是最终产品,感谢您的介绍 您需要在应用程序级别跟踪连接,以便发送到所有连接。但看看WebSocket和长轮询的大量工作是为您编写的。使用SignalR,您可以使用G

我正在创建一个websocket聊天应用程序,并设法将聊天信息中继到连接的其他浏览器。我有一个控制台应用程序监听一个端口

我的问题是。。。如果一个人登录到这个系统,我想让每个人都知道,我该怎么做?我正在使用Linq映射数据库,但如果日志记录正常,那么如何发送该消息,即用户X已登录

最后,我使用websockets创建了一个聊天室,这里是最终产品,感谢您的介绍


您需要在应用程序级别跟踪连接,以便发送到所有连接。但看看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!这正是我所需要的!非常感谢你为我指明了正确的方向!我将尝试实施这种方法!这是我的论文!如果我有任何疑问,我可以在这里问你吗?提前谢谢你,伙计!铁这正是我所需要的!非常感谢你为我指明了正确的方向!我将尝试实施这种方法!这是我的论文!如果我有任何疑问,我可以在这里问你吗?提前谢谢你,伙计!