我的第一个NodeJS WebSocket程序

Title:我的第一个NodeJS WebSocket程序
Date: 2017-11-15
Author: kagula
Environment:
 [1]Windows10/Windows7
 [2]Git-2.15.0-64-bit.exe
 [3]node-v8.9.1-x64.msi
 [4]bower 1.8.2

 [5]Visual Studio Code

 [6]Chrome 61.0.x


Introduction:
  收到用户发上来的http请求后,把消息分发给所有的Web socket客户端,这里直接上代码。

下次要用的时候可以很快找到。


Content
前端代码在我本机的全路径为“D:\workspace_js\testWS\public\view\index.html”
<html>
<head>
    <link rel="stylesheet" href="/css/external/bootstrap.css"> 
    
    <script src="/js/external/jquery.js" type="text/javascript"></script>
    <script src="/js/external/bootstrap.js"></script>
    <script>
    var ws = new WebSocket("ws://localhost:8001");
    ws.onopen = function (e) {
        console.log('Connection to server opened');
    }
    ws.onmessage = function (evt) {  
          writeToScreen("Received message: " + evt.data);  
          //echo_websocket.close();  
    };  
    function sendMessage() {
        ws.send($('#message').val());
    }
    function writeToScreen(msg)
    {
        var pre = document.createElement("p");  
        pre.style.wordWrap = "break-word";  
        pre.innerHTML = msg;  
        //output.appendChild(pre); //插入到最后一行。
        $("#output").prepend(pre);//插入到第一行。
    }
    </script>
</head>

<body >
    <div class="vertical-center">
        <div class="container">
            <p> </p>
            <form role="form" id="chat_form" οnsubmit="sendMessage(); return false;">
                <div class="form-group">
                    <input class="form-control" type="text" name="message" id="message"
                           placeholder="Type text to echo in here" value="" />
                </div>
                <button type="button" id="send" class="btn btn-primary"
                        οnclick="sendMessage();">
                    Send!
                </button>
            </form>
        </div>
    </div>
    <div id="output"></div>
</body>
</html>



后台代码在我机器中的全路径为“D:\workspace_js\testWS\app.js”
var express = require('express');//引入express模块  
var app = express();//创建应用  

var bodyParser = require('body-parser');
var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();

var app = express();//创建应用  
app.use(bodyParser.json({limit:'1mb'}));
app.use(bodyParser.urlencoded({    
    extended: true
  }));
  
//定义public路径  
var pub = __dirname + '/public';  
app.use(express.static(pub));//设置静态目录为pubic  

//定义address映射  
app.get('/', function(req, res){  
    res.sendFile('public/view/index.html', { root: __dirname });  
}); 

//http://localhost/sendMessage?message=abc
app.get('/sendMessage',function(req,res)
{
    console.log("get method:message=" + req.query.message);
    broadcast(req.query.message);
    res.send({code:0});
});

app.post('/sendMessage',function(req,res)
{//x-www-form-urlencoded方式
    console.log("post method:message=" + req.body.message);
    broadcast(req.body.message);
    res.send({code:0});
});


app.listen(8080);  
console.log('Express started on port 8080');  


var wsServer = require('ws').Server;
var wss = new wsServer({ port: 8001 });

//  
wss.broadcast = function broadcast(message) {  
    // console.log(ws);  
    // debugger;  
    wss.clients.forEach(function each(client) {  
        client.send(message);
    });  
};  

//
wss.on('connection', function (ws) {
    console.log('client connected');
    ws.on('message', function (message) {
        console.log(message);
    });
});

function broadcast(message) {
    wss.broadcast(message);
}

做关联用的bat文件(仅做参考)

SET MYPATH=D:\workspace_js\testWS

mklink /H  %MYPATH%\public\css\external\bootstrap.css %MYPATH%\bower_components\bootstrap\dist\css\bootstrap.css

mklink /H  %MYPATH%\public\js\external\angular.js %MYPATH%\bower_components\angular\angular.js
mklink /H  %MYPATH%\public\js\external\jquery.js %MYPATH%\bower_components\jquery\dist\jquery.js
mklink /H  %MYPATH%\public\js\external\bootstrap.js %MYPATH%\bower_components\bootstrap\dist\js\bootstrap.js

测试方式:

第一步:

打开浏览器,访问http://localhost:8080/

第二步:

新建Tab,参考下面的地址

http://localhost:8080/sendMessage?message=mymessage5

提交要群发的信息,也可以借助postman工具以post方式提交。

最后:

http://localhost:8080/

Tab上看到采用http方式提交的数据,测试完毕。


  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kagula086

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值