Как подключиться к Laravel WebSocket с клиента Xamarin Forms
у меня есть сервер На Laravel в котором я реализовал библиотеку Laravel WebSocet. Запускаю команду laravel websocket: serve, стартует все нормально, самое важное что у меня не получается это подключится с клиента в XamarinForms я использую для этого библиотеку SocketIOClient
Вот мой код
public async Task connectAsync()
{
Console.OutputEncoding = Encoding.UTF8;
Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));
var uri = new Uri("ws://192.168.0.105:6001");
var socket = new SocketIO(uri, new SocketIOOptions
{
Query = new Dictionary<string, string>
{
{"APP_NAME", "messager" },
{"PUSHER_APP_KEY", "ABCDEFG" },
{"PUSHER_APP_ID", "1234" },
{"PUSHER_APP_SECRET", "HIJKLMNOP" },
{"enabledTransports", "ws" },
{"PUSHER_APP_CLUSTER", "mt1" },
{ "wsPort","6001"},
{"wsHost","ws://192.168.0.105:6001" }
}
});
socket.OnConnected += Socket_OnConnected;
socket.OnPing += Socket_OnPing;
socket.OnPong += Socket_OnPong;
socket.OnDisconnected += Socket_OnDisconnected;
socket.OnReconnectAttempt += Socket_OnReconnecting;
try
{
await socket.ConnectAsync();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
throw;
}
socket.On("event-name", response =>
{
Console.WriteLine($"server: {response}");
});
Console.ReadLine();
}
private static async void Socket_OnConnected(object sender, EventArgs e)
{
Console.WriteLine("Socket_OnConnected");
var socket = sender as SocketIO;
await socket.EmitAsync("subscribe", new
{
channel = "channelName",
auth = ""
});
}
private static void Socket_OnPing(object sender, EventArgs e)
{
Console.WriteLine("Ping");
}
private static void Socket_OnPong(object sender, TimeSpan e)
{
Console.WriteLine("Pong: " + e.TotalMilliseconds);
}
private static void Socket_OnDisconnected(object sender, string e)
{
Console.WriteLine("disconnect: " + e);
}
private static void Socket_OnReconnecting(object sender, int e)
{
Console.WriteLine($"Reconnecting: attempt = {e}");
}
Ответы (1 шт):
Оказалось что библиотека устарела, я воспользовался библиотекой System.Net.WebSockets.Client.
И указал другую ссылку, оказалось что LaravelWebSocket в связке С Pusher формировал ключ который надо было указать в ссылке,/app/ABCDEFG Эту часть пути надо было дописать в итоге получалась целая ссылка
ws://192.168.0.105:6001/app/ABCDEFG
Где ABCDEFG ключ который вы создали при помощи Pusher
Вот здесь можно посмотреть как ставить LaravelWebSocket https://www.youtube.com/watch?v=pIGy7-7gGXI&ab_channel=DevMarketer
Вот Код
ClientWebSocket client = new ClientWebSocket();
public ChatViewModel()
{
ConnectToServerAsync();
}
async void ConnectToServerAsync()
{
await client.ConnectAsync(new Uri("ws://192.168.0.105:6001/app/ABCDEFG"), CancellationToken.None);
var data = "Helo";
var encoder = Encoding.UTF8.GetBytes(data);
var buffer = new ArraySegment<Byte>(encoder, 0, encoder.Length);
await client.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
//client.Abort();
}