0

SocketIO4Net を使用して、socket.io サーバーに接続できるワーカー ロールで .NET socket.io クライアントを作成しています。ドキュメントに記載されているよりも多くのコードを移動した後、名前空間に接続できました。しかし、私はまだイベントにメッセージを送受信できません。以下は私のコードです。socket.io .net クライアントにイベントを登録する方法を教えてください。私のプロジェクトにとって、ワーカーロールから socket.io サーバーイベントにメッセージを送信できることは非常に重要です。

broadcastSocketClient = new Client(localSocketUrl);

                broadcastSocketClient.Opened += SocketOpened;
                broadcastSocketClient.Message += SocketMessage;
                broadcastSocketClient.SocketConnectionClosed += SocketConnectionClosed;
                broadcastSocketClient.Error += SocketError;

                while (!broadcastSocketClient.IsConnected)
                {
                    broadcastSocketClient.Connect();
                }

                // register for 'connect' event with io server
                broadcastSocketClient.On("connect", (cn) =>
                {                      

                    var namespaceConnect = broadcastSocketClient.Connect("/namespacename");

                    // register for 'connect' event with io server
                    namespaceConnect.On("connect", (data) =>
                    {
                        namespaceConnect.Emit("test", "CONNECTED");

                        namespaceConnect.On("first", (message) =>
                        {
                            Console.WriteLine(message);

                        });
                    });    
                });                    
4

1 に答える 1

0

これはhttps://stackoverflow.com/a/16002007/1168541と非常によく似た質問ですが、問題が発生する領域の 1 つは接続するコードにあります。

while (!broadcastSocketClient.IsConnected)
            {
                broadcastSocketClient.Connect();
            }

複数の接続試行を爆破するのではなく、イベント メッセージ「接続済み」を待つ必要があります。while ループでクライアントに接続する機会を与えることは決してありません。

これらの行に沿って何かを試してください:

public class SampleClient
{
    private Client socket;
    private IEndPointClient nsTarget;
    private string localSocketUrl = "http:your_url_to_socketioserver";

    public void Execute()
    {
        Console.WriteLine("Starting SocketIO4Net Client Events Example...");


        socket = new Client(localSocketUrl);
        socket.Opened += SocketOpened;
        socket.Message += SocketMessage;
        socket.SocketConnectionClosed += SocketConnectionClosed;
        socket.Error += SocketError;

        // register for 'connect' event with io server
        socket.On("connect", (fn) =>
        {       // connect to namespace
            nsTarget = socket.Connect("/namespacename");
            nsTarget.On("connect", (cn) => nsTarget.Emit("test", new { data = "CONNECTED" }));
            nsTarget.On("first", (message) =>
            {
                Console.WriteLine("recv [socket].[update] event");
                Console.WriteLine("  raw message:      {0}", message.RawMessage);
                Console.WriteLine("  string message:   {0}", message.MessageText);
                Console.WriteLine("  json data string: {0}", message.Json.ToJsonString());
            });

        });

        // make the socket.io connection
        socket.Connect();
    }

    void SocketOpened(object sender, EventArgs e)
    {
        Console.WriteLine("SocketOpened\r\n");
        Console.WriteLine("Connected to ICBIT API server!\r\n");
    }

    void SocketError(object sender, ErrorEventArgs e)
    {
        Console.WriteLine("socket client error:");
        Console.WriteLine(e.Message);
    }

    void SocketConnectionClosed(object sender, EventArgs e)
    {
        Console.WriteLine("WebSocketConnection was terminated!");
    }

    void SocketMessage(object sender, MessageEventArgs e)
    {
        // uncomment to show any non-registered messages
        if (string.IsNullOrEmpty(e.Message.Event))
            Console.WriteLine("Generic SocketMessage: {0}", e.Message.MessageText);
        else
            Console.WriteLine("Generic SocketMessage: {0} : {1}", e.Message.Event, e.Message.Json.ToJsonString());
    }
    public void Close()
    {
        if (this.socket != null)
        {
            socket.Opened -= SocketOpened;
            socket.Message -= SocketMessage;
            socket.SocketConnectionClosed -= SocketConnectionClosed;
            socket.Error -= SocketError;
            this.socket.Dispose(); // close & dispose of socket client
        }
    }
}
于 2013-06-24T20:30:18.617 に答える