Я настраиваю клиент C # websocket для сервера, реализованного в nodejs (используя socket.io).Использование [Websocket4net]: https://github.com/kerryjiang/WebSocket4Net. Мой код может соединиться с сервером сокетов, но WebClient.Send ("message") не вызывает события сервера.Я застрял при отправке сообщения или вызова событий с сервера, используя websocket4net lib.Я выбрал эту библиотеку, потому что моя реализация находится в фреймворке 2.0 или менее.
Я попытался использовать websocket.send ("message") для вызова события сообщения после подключения, но оно не распознается на сервере.Не удалось вызвать функцию на сервере.Также посмотрел в Execute Command, но не смог реализовать это в моем классе.
public class JniorWebSocket : IDisposable
{
//public delegate void LogEventHandler(object sender, LogEventArgs args);
//public event LogEventHandler Log;
public event EventHandler Connected;
public event EventHandler Disconnected;
private WebSocket _websocket;
private string _uri;
private string sid;
public JniorWebSocket(string host) : this(host, 0) { }
public JniorWebSocket(string host, int port)
{
_uri = "ws://" + host;
if (0 != port) _uri += ":" + port + "/join/?EIO=3&transport=websocket";
_websocket = new WebSocket(_uri);
_websocket.Opened += new EventHandler(websocket_Opened);
_websocket.Error += Websocket_Error;
_websocket.Closed += websocket_Closed;
_websocket.MessageReceived += Websocket_MessageReceived;
_websocket.Open();
}
public void Dispose()
{
_websocket.Dispose();
GC.SuppressFinalize(this);
}
public bool AllowUnstrustedCertificate
{
get
{
return _websocket.AllowUnstrustedCertificate;
}
set
{
_websocket.AllowUnstrustedCertificate = value;
}
}
public void Connect()
{
_websocket.Open();
while (_websocket.State == WebSocketState.Connecting) { };
if (_websocket.State != WebSocketState.Open)
{
throw new Exception("Connection is not opened.");
}
}
public void Close()
{
_websocket.Close();
}
public void Send(string message)
{
try
{
_websocket.Send(message);
}
catch (Exception ex)
{
}
}
private void Websocket_Error(object sender, ErrorEventArgs e)
{
}
private void Websocket_MessageReceived(object sender, MessageReceivedEventArgs e)
{
if (e.Message.IndexOf("{") != -1)
{
var json = JObject.Parse(e.Message.Substring(e.Message.IndexOf("{")));
sid = json["sid"].ToString();
Console.WriteLine(sid);
if ("Error".Equals(sid)) HandleErrorMessage(json);
}
}
private void HandleErrorMessage(JObject json)
{
}
private void websocket_Opened(object sender, EventArgs e)
{
Connected?.Invoke(this, EventArgs.Empty);
Send(string.Empty);
}
private void websocket_Closed(object sender, EventArgs e)
{
Disconnected?.Invoke(this, EventArgs.Empty);
}
}
Вызов этого класса из моего основного
JniorWebSocket jniorWebSocket = new JniorWebSocket(uri, port);
jniorWebSocket.AllowUnstrustedCertificate = true;
jniorWebSocket.Connect();
jniorWebSocket.Send("message");
socket.io на стороне nodejs
const server = require('http').Server(app);
global.socketIO = SocketIO(server, { path: '/join' });
global.socketIO.on('connection', (socket) =>
{
socket.on('message',async (data) => {
console.info(data);
});
socket.on('authenticate', async (data) => {
try {
}
} catch(error) {
console.warn('Error while authenticating socket', error);
}
});
});
Я новичок в этой реализации C # websocket и не получаюкак я могу вызывать события сервера, и после этого я напишу некоторые события на стороне клиента.Ожидайте вызова всех событий сервера от клиента.