https://github.com/thinkjs/think-websocket-ws
websocket for ws
https://github.com/thinkjs/think-websocket-ws
Last synced: about 1 year ago
JSON representation
websocket for ws
- Host: GitHub
- URL: https://github.com/thinkjs/think-websocket-ws
- Owner: thinkjs
- License: mit
- Created: 2017-09-25T09:14:12.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2021-07-01T15:30:28.000Z (almost 5 years ago)
- Last Synced: 2025-03-22T03:51:17.453Z (about 1 year ago)
- Language: JavaScript
- Size: 7.81 KB
- Stars: 9
- Watchers: 13
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# think-websocket-ws
[](https://www.npmjs.com/package/think-websocket-ws)
ThinkJS 3.X's ws adapter for websocket.
## Install
```
npm install think-websocket-ws --save
```
## How to Config
Edit config file `src/config/adapter.js`, add options:
```js
const ws = require('think-websocket-ws');
exports.websocket = {
type: 'ws',
common: {
// common config
},
ws: {
handle: ws,
path: '/ws',
messages: [{
close: '/ws/close',
open: '/ws/open',
addUser: '/ws/addUser'
}]
}
}
```
More options see at [ws doc](https://github.com/websockets/ws/blob/master/doc/ws.md).
Edit config file `src/config/config.js`, add options:
```js
module.exports = {
// ...
stickyCluster: true
// ...
}
```
## 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();
}
}
// client
var ws = new WebSocket('ws://127.0.0.1:8360/ws');
ws.onopen = function() {
console.log('open...');
}
ws.onerror = function(evt) {
console.log(evt);
}
ws.onmessage = function(data) {
console.log(data);
}
$('.send').on('click', function(evt) {
var username = $.trim($('.usernameInput').val());
var room = $.trim($('.roomInput').val());
ws.send(JSON.stringify({
event: 'addUser',
data: {
username: username,
room: room
}
}));
});
```
## 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
ws.onmessage = function(data) {
data = JSON.parse(data.data);
console.log(data.event); // opend
console.log(data.data); // This client opened successfully!
}
```
## 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
ws.onmessage = function(data) {
data = JSON.parse(data.data);
console.log(data.event); // joined
console.log(data.data); // There is a new client joined successfully!
}
```