设为首页 收藏本站
查看: 941|回复: 0

[经验分享] HTML5 WebSocket之HelloWorld

[复制链接]
发表于 2017-3-1 07:43:16 | 显示全部楼层 |阅读模式
  原文http://fallenlord.blogbus.com/logs/110768932.html
方案
  要实现一个WebSocket有很多方案,客户端方面可以用原生的WebSocket对象,也可以使用类似Socket.IO、jQuery Websocket Plugin这样的封装API,服务器端则可以使用Jetty(Java)、Netty(Java)、mod_pywebsocket(Python&Apache)、nodejs(JavaScript)等
  这里我挑选了客户端Socket.IO+服务器端Socket.IO-node,这样做一方面客户端和服务器端都使用JavaScript,避免有些童鞋因为不了解Java、Python等其他语言而导致学习成本增加,另一方面两端框架均使用Socket.IO也可以避免客户端和服务器端学习两套不同框架而导致的学习成本
前提条件
  * Linux系统一个(或Mac、Solaris、Cgwin、MingW),用于安装nodejs
* 支持HTML5浏览器一个(非IE及其内核浏览器均可,建议Chrome)
安装WebSocket服务器
  1. 安装nodejs
  node.js是近年来较为流行的服务器端JavaScript框架,基于V8引擎开发,本人曾在早期做过其中文文档项目 https://github.com/fallenlord/node_doc_zh_CN
访问nodejs主页下载最新版本的nodejs,我用的是0.4.3(安装过程以Linux为例,其他平台可以访问https://github.com/joyent/node/wiki/Installation查看安装方法)。然后解压到本地

$ tar xfz node-v0.4.3.tar.gz
$ cd node-v0.4.3
$ ./configure --prefix /home/guolin/tools/node-v0.4.3
$ make
$ make install  如果安装过程出现问题,请确认本地安装有Python 2.4或更高版本,以及libssl-dev包
  2. 安装nodejs管理工具NPM
  NPM是个nodejs插件管理工具,执行下面的语句就能安装NPM

$ curl http://npmjs.org/install.sh | sh  3. 安装Socket.IO的nodejs插件
  Socket.IO是个JavaScript框架,包括服务器端和客户端,使用统一的API封装了各种实时连接(如WebSocket、Flash Socket、AJAX长轮询等),使得后端的连接可以对开发人员透明。安装只需要执行下面的命令即可:

$ npm install socket.io开始编码
  服务器端代码
  在服务器上任意目录编辑文件server.js:

var http = require("http"),
    io = require("socket.io");

// Create HTTP server
var server = http.createServer(function(request, response) {
    response.writeHead({ "Content-Type": "text/html" });
    response.end("HTML5 WebSocket Demo");
});
server.listen(8000, "localhost");

// Wrap HTTP server by socket.io
var socket = io.listen(server);
socket.on("connection", function(client) {
    console.log("connected");

    client.on("message", function(data) {
        client.send("Hello " + data);
    });

    client.on("disconnect", function() {
        console.log("disconnected");
    });
});  然后执行:

/home/guolin/tools/node-v0.4.3/bin/node server.js  可以看见服务器开始运行,此时访问 http://localhost:8000 如果看见HTML5 WebSocket Demo字样表示服务器启动成功
注意高亮部分,访问地址必须完全匹配高亮处写入的地址,例如,如果高亮处写的是localhost,且服务器IP地址为192.168.1.2,那么访问localhost将会成功,但访问192.168.1.2将会失败
  客户端代码
  在客户端编辑client.html文件:

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" charset="utf-8" src="http://localhost:8000/socket.io/socket.io.js"></script>
        <script type="text/javascript" charset="utf-8">
            var socket = new io.Socket("localhost", { port: 8000 });
            socket.connect();
            socket.on("connect", function(){
                console.log("connected");
            });
            socket.on("message", function(data){
                console.log("received message: " + data);
                document.getElementById("message").innerHTML = data;
            });
            socket.on("disconnect", function(){
                console.log("disconnected");  
            })

            function send() {
                var name = document.querySelector("input[name=name]").value;
                console.log("send message: " + name);
                socket.send(name);
            }
        </script>
    </head>
    <body>
        <label for="name">What's your name:</label>
        <input type="text" id="name" name="name" />
        <button>Send</button>
        <div id="message"></div>
    </body>
</html>  完成后直接用浏览器访问此文件(可以从文件系统访问,不要尝试访问 http://localhost:8000/client.html,那总是会显示HTML5 WebSocket Demo字样,因为nodejs自带的HTTP服务器默认不会读取本地文件)
  输入你的名字如guolin,点击Send,服务器端将返回Hello guolin并显示在页面上
  整个过程可以通过打开浏览器Console以及观察服务器Console了解到交互过程。同时对于Chrome来说,可以从开发人员工具中的Network栏中清楚的看到WebSocket与服务器端通信过程(如向ws:/协议发送GET请求,并得到一个101 WebSocket Protocol Handshake的响应等)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-348518-1-1.html 上篇帖子: 转 ofbiz瘦身[已验证,9.04-11.04 稍作修改可用] 下篇帖子: Solr4.0升级参考
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表