websocket icon indicating copy to clipboard operation
websocket copied to clipboard

Add example demonstrating a basic WebSocket protocol with message types

Open kabaluyot opened this issue 5 years ago • 12 comments

In HTML5 websockt or socket.io, you can consume messages just with the following lines of code:

var io = require('socket.io-client');
var socket = io('http://localhost:6001');

socket.on('connect', function () {
	console.log('connected');
});

socket.on('StockTicker', function (data) {
	console.log(data);
});

socket.on('StockBidAsk', function (data) {
	console.log(data);
});

socket.on('Stock', function (data) {
	console.log(data);
});

How to achieve the example above in this library?

kabaluyot avatar Mar 26 '20 12:03 kabaluyot

This library provides no way to route messages, you'd have to do that yourself. You could via a map, a switch statement etc.

See the examples for how to read and write messages.

nhooyr avatar Mar 27 '20 02:03 nhooyr

the chat example sir? If you may sir, can you provide a basic example for websocket client with "StockTicker" and "Stock" as channels (rooms). The examples are quite confusing esp to beginners and coming from different language like me :)

kabaluyot avatar Mar 27 '20 12:03 kabaluyot

I understand, let's add a simple example showing how to route different messages.

nhooyr avatar Mar 27 '20 13:03 nhooyr

Thank you sir. Maybe you can send just a guide or sample here and I will make a PR

kabaluyot avatar Mar 27 '20 15:03 kabaluyot

Hey @kabaluyot

We had the same problem, so we ended up with writing simple socket.io alternative isp-etp-go on top of nhooyr/websocket, maybe you'd be interested.

pymq avatar Apr 14 '20 11:04 pymq

Thank you @pymq, will definitely check it out. For the moment, I was forced to do the client implementation using Typescript :/

kabaluyot avatar Apr 15 '20 02:04 kabaluyot

So I created this fork with the chat example upgraded for specific chat rooms. In total, it has 4 endpoints

/subscribe - Subscribe to all messages sent to the websocket server /subscribe/ - Subscribe to all messages from a specific room (i.e. /subscribe/cool)

/publish - Publish to every single listener regardless of whether they are in a room or not /publish/ - Publish to your room and any global subscribers (i.e publish/cool)

https://github.com/dafinley/websocket/tree/master/examples/chat

dafinley avatar May 17 '20 20:05 dafinley

There's an ios and android app setup to work with it: https://github.com/dafinley/twilio-video-app-android https://github.com/dafinley/twilio-video-app-ios

dafinley avatar May 18 '20 00:05 dafinley

Well appreciated @dafinley . Thank you

kabaluyot avatar May 18 '20 03:05 kabaluyot

With inspiration from @dafinley I think the best move here is to extend the chat example to add structure like timestamps to each message and add two more message types to indicate when a client connects/leaves.

nhooyr avatar May 19 '20 03:05 nhooyr

@nhooyr smooth websocket lib man. This was my intro into go. If anybody lands here I did a walkthru video on using this chat example https://www.youtube.com/watch?v=Jhnv5tA6Waw

dafinley avatar May 19 '20 12:05 dafinley

See #309 and #301 for more problems the new example should fix.

nhooyr avatar Aug 06 '21 09:08 nhooyr