Подключитесь к серверу ac # websocket с помощью socket.io. (Как это сделать?) - PullRequest
0 голосов
/ 18 февраля 2019

Проще говоря, я ищу способ подключения к серверу ac # websocket с помощью socket.io на стороне клиента.

Хорошо, поэтому я попытался создать простой сервер websocket в c # с помощью httpListener и простая веб-страница со скриптом, который использовал простые веб-сокеты, и он работал хорошо, но потом я понял, что мой клиент на самом деле не работает в браузере, и веб-сокеты не работают изконтекст браузера.

Так что я немного покопался и обнаружил, что могу использовать socket.io для решения своей проблемы, но затем socket.io использует некоторые специальные веб-сокеты, которые используют какой-то уникальный протокол.Мой сервер Websocket перехватывает запрос, отправленный с socket.io, но у меня нет возможности с ним связаться.Насколько я понимаю, я должен выполнить конкретное рукопожатие, чтобы соединиться через веб-сокет, предоставленный socket.io.Вот код на данный момент:

    private static readonly HttpListener httpListener = new HttpListener();
    private static readonly Mutex signal = new Mutex();

    public static void Main(string[] args)
    {
        httpListener.Prefixes.Add("http://localhost:9000/");
        httpListener.Start();
        while (signal.WaitOne())
        {
            ReceiveConnection();
        }
    }

    public static async Task ReceiveConnection()
    {
        var context = await
            httpListener.GetContextAsync();
        if (context.Request.IsWebSocketRequest)
        {
            var webSocketContext = await context.AcceptWebSocketAsync(null);
            var webSocket = webSocketContext.WebSocket;

            var recvArr = new byte[1024];

            while (webSocket.State == WebSocketState.Open)
            {
                await webSocket.ReceiveAsync(new ArraySegment<byte>(recvArr), CancellationToken.None);

                var str = Encoding.Default.GetString(recvArr);
                Console.WriteLine(str);

                await webSocket.SendAsync(
                    new ArraySegment<byte>(Encoding.UTF8.GetBytes("Message from server ")),
                    WebSocketMessageType.Text, true, CancellationToken.None);
            }
        }

        signal.ReleaseMutex();
    }
}
//client
function connectToServer()
{
    console.log('Function started');

    var socket = io.connect('http://localhost:9000',{upgrade: false, transports: ['websocket']});

    socket.on('connect', () => {
        console.log(socket.connected); // true
    });
    //socket.send("Some Data")
    socket.emit('foo',"hello");
}

Этот простой сервер веб-сокетов, который я обнаружил, на самом деле получит что-то из socket.io иногда пустую строку или иногда какой-то странный запрос, но я не могу отправить илиполучать любые полезные данные через сокет.

Пожалуйста, будьте немного более прощающими, так как это самый первый вопрос, который я задал для stackoverflow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...