2017-01-29 1 views
0

Я могу подключиться к моему серверу socketio, но как я могу отправить запрос с параметрами?websocket-sharp, как работать с сервером socketio и отправлять запрос «emit»

Мой socketio сервер слушать событие

socket.on('init', (data) => { 
    console.log('init', data); 
}); 

на стороне клиента я судимый сделать это

_socket.OnMessage += (sender, e) => 
{ 
    Console.WriteLine("message: {0} {1}", e.IsBinary, e.Data); 
    _socket.Send(MakePacket("init", new Init 
     { 
      key = "1", 
      room = "eq", 
      type = "s" 
     }.ToJson()) 
    ); 
}; 

private string MakePacket(string e, string data) 
{ 
    return new[] {e, data}.ToJson(); 
} 

так я отправить JSON на сервер [ "INIT", { "типа":» s "," key ":" 1 "," room ":" eq "}]

Но сервер не будет реагировать на этот пакет. Сервер работает нормально, у меня проблема только при вызове этого события на C#. Что я делаю неправильно?

ответ

1

C# имеет socketio библиотеку, но У меня есть некоторые проблемы, на которые я не могу найти ответы, и поддержки нет. Поэтому я переключился на websocket-sharp.

Afer некоторые сведения об отладочной информации от сервера socketio я нашел ответ. Если я отправлю эту строку, все будет хорошо работать

42["init", {"type":"s","key":"1","room":"eq"}] 

Просто добавьте 42 до json, и все будет нормально работать. Магия. Я думаю, что этот номер 42 похож на ваш текущий статус соединения или что-то в этом роде. Потому что, когда вы просто подключаетесь к серверу socketio, он посылает строку с 0 до json.

2

Проблема заключается в том, что socket.io не является обычным websocket, а настраивается протоколом поверх websocket (или также поверх длинного опроса HTTP в качестве резервной копии и при инициализации). Это означает говорить с сервером socket.io, вы должны кодировать свои данные и сообщения так же, как socket.io. Here, похоже, есть документация о том, как это работает.

Альтернативы:

  • Используйте socket.io библиотеку на стороне клиента - но я не знаю, если один существует
  • Работа сырьём WebSockets на стороне сервера
Смежные вопросы