3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

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 搜尋關鍵字:

本文由blogjohnsonluorg提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦