Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/thinkjs/think-websocket-socket.io
Socket.io adapter for websocket
https://github.com/thinkjs/think-websocket-socket.io
socket-io think-adapter thinkjs3
Last synced: 4 months ago
JSON representation
Socket.io adapter for websocket
- Host: GitHub
- URL: https://github.com/thinkjs/think-websocket-socket.io
- Owner: thinkjs
- License: mit
- Created: 2017-05-14T06:46:53.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2022-10-10T04:10:07.000Z (over 1 year ago)
- Last Synced: 2024-02-09T15:47:07.035Z (5 months ago)
- Topics: socket-io, think-adapter, thinkjs3
- Language: JavaScript
- Homepage:
- Size: 21.5 KB
- Stars: 9
- Watchers: 13
- Forks: 4
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Lists
- think-awesome - think-websocket-socket.io
README
# think-websocket-socket.io
[![Build Status](https://travis-ci.org/thinkjs/think-websocket-socket.io.svg?branch=master)](https://travis-ci.org/thinkjs/think-websocket-socket.io)
[![Coverage Status](https://coveralls.io/repos/github/thinkjs/think-websocket-socket.io/badge.svg?branch=master)](https://coveralls.io/github/thinkjs/think-websocket-socket.io?branch=master)
[![npm](https://img.shields.io/npm/v/think-websocket-socket.io.svg?style=flat-square)](https://www.npmjs.com/package/think-websocket-socket.io)Socket.io adapter for websocket
## Install
```
npm install think-websocket-socket.io
```## How to Config
Edit config file `src/config/adapter.js`, add options:
```js
const socketio = require('think-websocket-socket.io');
exports.websocket = {
type: 'socketio',
common: {
// common config
},
socketio: {
handle: socketio,
allowOrigin: null, // any origin is allowed by default
path: '/socket.io', // `/socket.io` by default.
adapter: null,
messages: [{
open: '/websocket/open', // websocket action when connected
close: '/websocket/close', // websocket action when close
addUser: '/websocket/addUser', //websocket addUser action when event is addUser
}]
}
}
```Edit config file `src/config/config.js`, add options:
```js
module.exports = {
// ...
stickyCluster: true
// ...
}
```### Config Options
`path`: The socket.io process path is `/socket.io` by default. You can edit the folloing configuration if you need.
`adapter`: When using multiple nodes to deploy WebSocket, multiple nodes can communicate with Redis. You can get things done by set up adapter. For example:
```js
const socketio = require('think-websocket-socket.io');
const redis = require('socket.io-redis');
const adapter1 = redis({ host: 'localhost', port: 6379 });
exports.websocket = {
type: 'socketio',
socketio: {
// ...
adapter: adapter1,
// ...
}
}
````allowOrigin`: Sets the allowed origins value. Defaults to any origins being allowed. `allowOrigin` can be `string`, `array` or `function`. More detail see at https://socket.io/docs/server-api/#server-origins-value[https://socket.io/docs/server-api/#server-origins-value].
## Work with Action
```js
// server
module.exports = class extends think.Controller {
constructor(...arg) {
super(...arg);
}
openAction() {
console.log('ws open');
return this.success();
}
closeAction() {
console.log('ws close');
return this.success();
}
addUserAction() {
console.log('addUserAction ...');
console.log(this.wsData); // this.req.websocketData, 'thinkjs'
console.log(this.websocket); // this.req.websocket, websocket instance
console.log(this.isWebsocket); // this.isMethod('WEBSOCKET'), true
return this.success();
}
}// in `view/websocket_index.html`
//
var socket = io();
socket.on('opend', function(data) {
console.log(data);
});
socket.emit('addUser', 'thinkjs');
```## emit
You can emit event to the current socket in Action through `this.emit`:
```js
// server
module.exports = class extends think.Controller {
constructor(...arg) {
super(...arg);
}
openAction() {
this.emit('opend', 'This client opened successfully!');
return this.success();
}
}// client
//
var socket = io();
socket.on('opend', function(data) {
console.log(data);
});
```## broadcast
You can broadcast event to all sockets in Action through method `this.broadcast`:
```js
// server
module.exports = class extends think.Controller {
constructor(...arg) {
super(...arg);
}
openAction() {
this.broadcast('joined', 'There is a new client joined successfully!');
return this.success();
}
}// client
//
var socket = io();
socket.on('joined', function(data) {
console.log(data);
});
```