1. 程式人生 > >NodeJs小試牛刀--聊天室搭建

NodeJs小試牛刀--聊天室搭建

最近研究聊天室功能,準備用nodejs實現。下面是自己的嘗試!!

  • nodejs的安裝這裡就不詳細贅述了。

程式建立

  • 引入required模組
var express = require('express');
var app = express();
var http = require('http').Server(app);
  • 建立監聽埠
http.listen(8000, function() {
    console.log('Server running at http://127.0.0.1:8000/');
});
  • 以上程式碼我們完成了一個可以工作的 HTTP 伺服器。使用 node 命令執行以上的程式碼:(*
    就是我們上面程式碼儲存的檔名)
node ****.js

這裡寫圖片描述

express模組

var express = require('express');
var app = express();
var http = require('http').Server(app);
http.listen(8000, function() {
    console.log('Server running at http://127.0.0.1:8000/');
});
  • 這樣我們的8000埠就開啟這個服務了。下面我們通過socket.io模組實現服務於客戶端的互動。

socket.io模組

  • 首先io.sockets.on函式接受字串”connection”作為客戶端發起連線的事件,當連線成功後,呼叫帶有socket引數的回撥函式。我們在使用socket.IO的時候,基本上都在這個回撥函式裡面處理使用者的請求。
  • socket中最重要的兩個方法是emit和on方法。
    說白了就是傳送和接收的方法。在服務端socket.emit就是想客戶端傳送資料,socket.on就是接收客戶端返回的資料。在客戶端恰恰相反。
io.on('connection', function(socket) {}
  • connect作為客戶端發起連線的事件。當連線成功後開始呼叫帶有socket的回撥函式。
this.socket = io.connect('ws://127.0.0.1:8000');
this.socket.emit('login', {
    userid: this.userid,
    username: this
.username, userpwd: this.userpwd });
  • 客戶端對應的就發起這個連線請求。發起連線後客戶端向服務端發起一個事件login,並且攜帶引數物件(userid,username,userpwd)。下面我們看看服務端接收這個事件login
socket.on('login', function(obj) {
    //obj這個物件就是客戶端傳遞過來的,obj.userid,obj.username,obj.userpwd
    //我們就可以通過obj這個物件處理相應的登入邏輯處理
}
  • nodejs主要通過socket來實現服務端和客戶端的通訊

其他API

  • 向所有客戶端廣播:socket.broadcast.emit(‘broadcast message’);

我們可以通過他實現群內公告等功能。

  • 進入一個房間(非常好用!相當於一個名稱空間,可以對一個特定的房間廣播而不影響在其他房間或不在房間的客戶端):socket.join(‘your room name’);

  • 向一個房間廣播訊息(傳送者收不到訊息):socket.broadcast.to(‘your room name’).emit(‘broadcast room message’);

  • 向一個房間廣播訊息(包括髮送者都能收到訊息)(這個API屬於io.sockets):io.sockets.in(‘another room name’).emit(‘broadcast room message’);

  • 強制使用WebSocket通訊:(客戶端)socket.send(‘hi’),(伺服器)用socket.on(‘message’, function(data){})來接收。