クライアントとサーバーの両方にAlchemyWebSocketを使用していましたが、メッセージの破損/ドロップで問題が発生しました。だから私は別のサーバー側の実装を試しています。Fleckを使用してサーバーを実装し、javascriptを使用してメッセージを送信すると、サーバーはすべてのメッセージを受信し、以前の問題を解決しました。
ただし、C#クライアントからもWebSocketサーバーにメッセージを送信できる必要があります。FleckにはC#でのクライアント側の実装がないため、Alchemyを使い続けると思いました。クライアント側のコードは変更しないので、以前と同じようにサーバーに接続する必要があると思いましたが、メッセージは受信されていません(デバッガーに従って送信されていますが)。
これが私のサーバー側の実装です(Fleck):
private void OnStartWebSocketServer()
{
var server = new WebSocketServer("ws://localhost:11005");
server.Start(socket =>
{
socket.OnOpen = () => Console.WriteLine("Open!");
socket.OnClose = () => Console.WriteLine("Close!");
socket.OnMessage = message => OnReceive(message);
});
}
private static void OnReceive(String message)
{
UpdateUserLocation(message);
}
これが私のクライアント側の実装(Alchemy)です:
class WSclient
{
WebSocketClient aClient;
public WSclient(String host, String port)
{
aClient = new WebSocketClient("ws://" + host + ":" + 11005 + "/chat")
{
OnReceive = OnReceive,
OnSend = OnSend,
OnConnect = OnConnected,
OnConnected = OnConnect,
OnDisconnect = OnDisconnect
};
aClient.Connect();
}
...
public void Send(String data)
{
aClient.Send(data);
}
Alchemyクライアントが接続文字列「/chat」の最後にチャネルを必要とするという事実と関係があるのではないかと思いました。ただし、空白のままにするか、「/」だけでエラーが発生します。