Zi 字媒體
2017-07-25T20:27:27+00:00
這是Node.js最常用到的套件,Socket.io的優點就是可以達到Server push的效果,且其中連線是使用handshake,如果要做一些與使用即時互動的功能,使用socket.io是最適合不過的(socket.io source)
安裝
npm install socket.io
使用範例
Server side
//Express 3.x
var express = require('express');
var app = express();
var server = require('http').createServer(app)
var io = require('socket.io').listen(server);
//listen port
server.listen(1234);
//.on()為socket的接收端,預設的key值是connection
io.sockets.on('connection', function (socket) {
//接收key值為set nickname的socket,並傳入一個變數name
socket.on('set nickname', function (name) {
//.set()為設定socket中的暫存變數,當同個變數內容使用範圍不止在這個區域時可以使用,可同時帶入function執行動作
socket.set('nickname', name, function () {
//.emit()為socket的發送端
socket.emit('ready', name);
});
//.get()為取得socket中暫存的變數
socket.get('nickname', function(error, name) {
console.log(name);
});
});
});
Client side
//連接伺服器端的socket.io
var socket = io.connect('http://120.119.29.125:1234');
//.on()為socket的接收端,client端預設的key值是connect
socket.on('connect', function () {
//.emit()為socket的發送端
socket.emit('set nickname', prompt('你的名字?'));
//.on()為socket的接收端
socket.on('ready', function ( name ) {
//do something
});
});
Server Broadcast(發送給其他在線上的socket)
//將emit()改成broadcast.emit()即可 (注意,該broadcast自己會收不到)
socket.broadcast.emit('user connected','test');
//broadcast全部,包括自己
io.sockets.emit('user connected','test');
Authorization
socket.io也可以從 handshake Object 取得一些連線資料 (參考文件)
io.sockets.on('connection', function (socket) {
console.log(socket.handshake);
});
handshake Object 格式
{
headers: req.headers // the headers of the request
, time: (new Date) +'' // date time of the connection
, address: socket.address() // remoteAddress and remotePort object
, xdomain: !!headers.origin // was it a cross domain request?
, secure: socket.secure // https connection
, issued: +date // EPOCH of when the handshake was created
, url: request.url // the entrance path of the request
, query: data.query // the result of url.parse().query or a empty object
}
利用configure統一做一些處理
io.configure(function () {
io.set('authorization', function (handshakeData, callback) {
var ip = handshakeData.address.address;
if (ip == '127.0.0.1') {
//自訂handshakeData內容
handshakeData.username = "Localhost";
} else {
handshakeData.username = "Johnson";
}
callback(null, true); // error first callback style
});
});
io.sockets.on('connection', function (socket) {
//handshake
console.log(socket.handshake.username);
});
Categories: Node.js
分類
Android
AngularJS
API Blueprint
Chrome
Database
MySQL
DataStructure
Docker
Editor
Vim
Firefox
Git
GitLab
Google API
Hadoop
Language
Go
Java
JavaScript
jQuery
jQueryChart
Node.js
Vue
PHP
Laravel
ZendFramework
Python
Mac
Network
Cisco
DLink
Juniper
Oauth
Server
Apache
Share
Unix
FreeBSD
Linux
WebDesign
Bootstrap
CSS
HTML
Wordpress
Search
搜尋關鍵字:
寫了
5860316篇文章,獲得
23313次喜歡