Adonis Websocket is the official **websockets** provider for AdonisJs. It lets you easily setup/authenticate channels and rooms with elegant syntax and power of ES2015 generators.:rocket:
## Setup Follow the below instructions to setup this provider
npm i --save adonis-websocket
All providers are registered inside start/app.js
file.
const providers = [
'adonis-websocket/providers/WsProvider'
]
Aliases makes it easier to reference a namespace with a short unique name. Aliases are also registered inside start/app.js
file.
const aliases = {
Ws: 'Adonis/Addons/Ws'
}
Setup process is done. Let's use the Ws provider now.
- In folder
start
create filesocket.js
andws.js
touch start/socket.js
touch start/ws.js
socket.js
register chanelws.js
kennel of websocket, i be can config middleware in here
- Create Channel base listen connection to path of websocket, in file
socket.js
const Ws = use('Ws')
// Ws.channel('/chat', function (contextWs) {
Ws.channel('/chat', function ({ socket }) {
// here you go
})
- Config in file
ws
name and global
const Ws = use('Ws')
const globalMiddlewareWs = [
'Adonis/Middleware/AuthInitWs'
]
const namedMiddlewareWs = {
auth: 'Adonis/Middleware/AuthWs'
}
Ws.global(globalMiddlewareWs)
Ws.named(namedMiddlewareWs)
- we have two middleware default is
Adonis/Middleware/AuthInitWs
andAdonis/Middleware/AuthWs
using authentication is compatible withAdonis Auth
Ws.channel('/chat', function ({ socket }) {
// here you go
}).middleware(<name middleware | function>)
- middleware function
Ws.channel('/chat', function ({ socket }) {
// here you go
}).middleware(async fuction(context, next) {
....
await next();
})
Create controller websocket is a Chanel
adonis make:controller <Name>
and select
> For Websocket channel
- You can see controller in folder
app\Controllers\Ws
'use strict'
class LocationController {
// constructor (ContextWs) {
constructor ({ socket, request }) {
console.log('constructor');
this.socket = socket
this.request = request
}
// listion event `ready`
onReady () {
console.log('ready');
this.socket.toMe().emit('my:id', this.socket.socket.id)
}
joinRoom(ContextWs, payload) {
}
leaveRoom(ContextWs, payload) {
}
}
module.exports = LocationController
- Structs object ContextWs
auth
is Object AddonisSocket
- attribute
io
of socket.io - attribute
socket
of socket.io when client connect to Chanel - method
id
isid
of socket - method
rooms
get list room - method
on
issocket.on
- method
to
get socket ofid
connect - method
join
andleave
is room - method
disconnect
disconnect chanel
auth
isAdonis Auth
request
isAdonis request
In favor of active development we accept contributions from everyone. You can contribute by submitting a bug, creating pull requests or even improving documentation.
You can find a complete guide to be followed strictly before submitting your pull requests in the Official Documentation.