Licence: MIT
A server/client bundle setup to solve some personal issues I have with other solutions out there.
npm install @superhero/websocket
...or just set the dependency in your package.json
file:
{
"dependencies":
{
"@superhero/websocket": "*"
}
}
const Websocket = require('@superhero/websocket')
const options = { debug:true }
const websocket = new Websocket(options)
// listen on port 80
websocket.server.listen({ port:80 })
websocket.events.on('HelloWorld', (ctx, dto) =>
{
// dto == { 'I':'am','now':'connected' }
ctx.emit('sup m8', { 'this':'is','the':'response' })
})
websocket.events.on('¯|_(ツ)_/¯', (ctx, dto) =>
{
// dto == { 'also':'works' }
// headers is an object of the request headers sent when connection was
// established
console.log(ctx.headers)
// client ip
console.log(ctx.socket.remoteAddress)
// ip family (IPv4 or IPv6)
console.log(ctx.socket.remoteFamily)
// numeric representation of the remote port..
console.log(ctx.socket.remotePort)
})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Websocket by a Superhero</title>
</head>
<body>
<script data-main="/main" src="//requirejs.org/docs/release/2.2.0/minified/require.js"></script>
</body>
</html>
define(
[
// this "cient" -module is included in this repo. see `client.browser.js` file
'client'
],
function(client)
{
var socket = client(
{
host : 'localhost',
debug : true
})
.on('sup m8', function(dto)
{
// dto == { 'this':'is','the':'response' }
socket.emit('¯|_(ツ)_/¯', { 'also':'works' })
})
.connected(function(socket2)
{
// `socket` === `socket2`
// socket2 is however returned through a promise that the socket is
// connected. attaching listeners does not need this promise, emitting
// messages however needs a connection to send to.
// example
socket2.emit('HelloWorld', { 'I':'am','now':'connected' })
})
})
The module has both a server and a client. So you can use the module for a server to server connection, for what ever reason you now want to do that...
const WebsocketServer = require('@superhero/websocket')
const WebsocketClient = require('@superhero/websocket/client')
const server = new WebsocketServer()
const client = new WebsocketClient()
const evt1 = 'foo'
const evt2 = 'bar'
const dto1 = 'baz'
const dto2 = 'qux'
const port = 9001
server.server.listen({ port })
server.server.on('listening', async () =>
{
await client.connect(port)
client.emit(evt1, dto1)
})
server.events.on(evt1, (ctx, dto) =>
{
// dto === 'baz'
ctx.emit(evt2, dto2)
})
client.events.on(evt2, (dto) =>
{
// dto === 'qux'
})