nhooyr / websocket

Minimal and idiomatic WebSocket library for Go

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Add example demonstrating a basic WebSocket protocol with message types

kabaluyot opened this issue · 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?

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.

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 :)

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

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

commented

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.

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

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

Well appreciated @dafinley . Thank you

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 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

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