首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于Node.js的Web Socket

基于Node.js的Web Socket

作者头像
meteoric
发布于 2018-11-15 09:57:59
发布于 2018-11-15 09:57:59
1.3K00
代码可运行
举报
文章被收录于专栏:游戏杂谈游戏杂谈
运行总次数:0
代码可运行

Node.js就不介绍了(如果你写JavaScript,就应该知道它)

以前看到过很多关于node.js的文章,但一直没有尝试去搭建node.js的环境。这里有一篇文章叫“websocket与node.js的完美结合

看完那篇文章,依旧没有什么头绪,决定还是step by step…

在笔记本上跑东西就是比较吃力(况且还是低配置~),就懒得去开虚拟机了,决定直接用xp。

关于windows下安装node.js,我参考的一这篇文章:在Windows下试验Node.js,搭建环境的步骤:

1、下载、解压

2、测试node.js

我下载该文档存放于D盘的QMDownload中,如图所示:

至于每个目录的文件内容暂时可不用管,重点是能让node.js能正常工作。我弄了一个test.js,然后在dos下进入该目录,测试node.js是否能正常工作。

node.js中的内容为:

console.log("Hello oschina!");

测试:

可以再写个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var http = require('http');  
server = http.createServer(function (req, res) {  
      res.writeHeader(200, {"Content-Type": "text/plain"});  
      res.end("Hello oschina\n");  
})  
server.listen(8000);  
console.log("httpd start @8000");  

环境应该差不多了。下面要开始用node.js写socketServer了

在谷歌里搜索了很多资料,本想基于一位老外写的模块进行测试,发现跑不起来。

他的项目:Basic-Node.js-Websocket-Chat

启动的时候报找不到utils模块,折腾了半天,也没能跑起来,果断放弃了,继续寻找…

后来找到这篇文章:Node.js and HTML5 Web Sockets,在里面找到别人写好的模块:node.ws.js

它的主页有例子,告诉使用者如何使用它的模块。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var sys = require("sys"),
    ws = require("./ws");

  ws.createServer(function (websocket) {
    websocket.addListener("connect", function (resource) { 
      // emitted after handshake
      sys.debug("connect: " + resource);

      // server closes connection after 10s, will also get "close" event
      setTimeout(websocket.end, 10 * 1000); 
    }).addListener("data", function (data) { 
      // handle incoming data
      sys.debug(data);

      // send data to client
      websocket.write("Thanks!");
    }).addListener("close", function () { 
      // emitted when server or client closes connection
      sys.debug("close");
    });
  }).listen(8080);

我下载了ws.js,然后将它放在node.js解压目录下的lib目录中D:\QMDownload\nodejs-0.4.6\lib\ws.js

然后基于这个模块写socket server(socket.js--存放于D:\QMDownload\nodejs-0.4.6目录下):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var sys = require("sys"),
    ws = require("../lib/ws");

var socketPool = [];

var server = ws.createServer(function(socket) {
    
    socket.addListener("connect", function(res) {
        sys.puts("client connected from:" + socket.remoteAddress + "" + res);
        socket.write("welcome\r\n");

        socketPool.push(this);
    });

    socket.addListener("data", function(data) {
        //socket.write(data);

        for (var i = 0, len = socketPool.length; i < len; i++)
        {
            socketPool[i].write(data);
        }
    });

    socket.addListener("close", function() {
        sys.puts("client close!");

        for (var i = 0, len = socketPool.length; i < len; i++)
        {
            if (this == socketPool[i])
            {
                socketPool.splice(i, 1);
                break;
            }
        }
    });

});

server.listen(8082);

在这里我只是加了一个数组(socket池的概念),因为在测试中,我发现socket.write是可以反馈消息给客户端,但只是那个发送消息过来的客户端,如果要想对消息进行广播(broadcast),我尝试着这里去使用,但并不知道这样写是否有问题(暂时忽略吧~ 等以后有精力再仔细研究了)

接下来是前台页面了,这个相对简单一些,逻辑部分并不多,需要解决的事情:

1、判断当前浏览器是否支持:WebSocket

2、使用WebSocket中的几个常用方法:onopen、onclose、onmessage、send处于一下消息

HTML的源码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html> 
<head> 
<title>Web Socket Chat</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8">

<script src="jquery-1.3.2.min.js" type="text/javascript"></script>   1:     2: <script type="text/javascript">   3:     var ws;   4:     $(document).ready(function () {   5:     6:         if ("WebSocket" in window) {   7:             debug("Browser supports web sockets!", 'success');   8:             connect($('#host').val());   9:             $('#console_send').removeAttr('disabled');  10:         } else {  11:             debug("Browser does not support web sockets", 'error');  12:         };  13:    14:         // function to send data on the web socket  15:         function ws_send(str) {  16:             try {  17:                 ws.send(str);  18:             } catch (err) {  19:                 debug(err, 'error');  20:             }  21:         }  22:    23:         // connect to the specified host  24:         function connect(host) {  25:    26:             debug("Connecting to " + host + " ...");  27:             try {  28:                 ws = new WebSocket(host); // create the web socket  29:             } catch (err) {  30:                 debug(err, 'error');  31:             }  32:             $('#host_connect').attr('disabled', true); // disable the 'reconnect' button  33:    34:             ws.onopen = function () {  35:                 debug("connected... ", 'success'); // we are in! :D  36:             };  37:    38:             ws.onmessage = function (evt) {  39:                 debug(evt.data, 'response'); // we got some data - show it omg!!  40:             };  41:    42:             ws.onclose = function () {  43:                 debug("Socket closed!", 'error'); // the socket was closed (this could be an error or simply that there is no server)  44:                 $('#host_connect').attr('disabled', false); // re-enable the 'reconnect button  45:             };  46:         };  47:    48:         // function to display stuff, the second parameter is the class of the <p> (used for styling)  49:         function debug(msg, type) {  50:             $("#console").append('<p class="' + (type || '') + '">' + msg + '</p>');  51:         };  52:    53:         // the user clicked to 'reconnect' button  54:         $('#host_connect').click(function () {  55:             debug("\n");  56:             connect($('#host').val());  57:         });  58:    59:         // the user clicked the send button  60:         $('#console_send').click(function () {  61:             ws_send($('#console_input').val());  62:         });  63:           64:         $('#console_input').keyup(function (e) {  65:             if(e.keyCode == 13) // enter is pressed  66:                 ws_send($('#console_input').val());  67:         });  68:    69:     });</script> 
 
<style type="text/css"> 
    .error {color: red;}
    .success {color: green;}
    #console_wrapper {background-color: black; color:white;padding:5px;}
    #console p {padding:0;margin:0;}
</style> 
</head> 
 
<body> 
 
<h1>Web Socket Chat</h1> 
 
<div id="server_wrapper"> 
    <p>Server
        <input type="text" name="host" id="host" value="ws://localhost:8082/" /> 
        <input type="submit" name="host_connect" id="host_connect" value="重新连接" /> 
    </p>
</div> 
 
<div id="console_wrapper"> 
    <pre id="console"></pre> 
    <input type="text" name="console_input" id="console_input" value="" /> 
    <input type="submit" name="console_send" id="console_send" value="Send" /> 
</div> 
 
</body> 
 
</html>

如果使用flash进行socket进行连接,那么socket server先要返回一个security policy的字符串(解决安全沙箱的问题)

文章中使用的文件打包下载(包含ws.js、socket.js)>>

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-06-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python使用PyPDF2库进行PDF文件操作的详细教程
在Python中,PyPDF2是一个强大的库,用于处理PDF文件。无论是合并多个PDF文件、拆分PDF文件、提取文本或者旋转页面,PyPDF2都提供了简单而灵活的解决方案。本教程将介绍PyPDF2库的基本概念和用法,帮助你更好地理解如何在Python中进行PDF文件的各种操作。
Michel_Rolle
2024/01/25
4.5K0
如何使用Python玩转PDF各种骚操作?
Portable Document Format(可移植文档格式),或者PDF是一种文件格式,可以用于跨操作系统的呈现和文档交换。尽管PDF最初是由Adobe发明的,但它现在是由国际标准化组织(ISO)维护的开放标准。你可以通过使用PyPDF2包在Python中处理已先存在的PDF。
Python数据科学
2019/05/10
2.1K0
Python巧妙操作PDF文档
PDF(Portable Document Format)是一个通用文件格式,几乎可以在所有操作系统和设备上阅读。PDF 文件可以包含包括文本、图片、图形、表格、链接、多媒体等各种内容,具有高度的可读性和可编辑性,适用于各种文档形式的存储和传输。PDF 文件支持加密和数字签名保护机制,确保了文件的安全性。PDF 文件可以被搜索、复制、打印,方便办公和学习使用。
double
2024/01/23
2960
Python巧妙操作PDF文档
PDF批量加水印 与 去除水印实践
本文主要目标是尝试去除水印,但是为了准备测试‍数据,我们需要先准备好有水印的pdf测试文件。
可以叫我才哥
2024/06/18
3780
PDF批量加水印 与 去除水印实践
用 Python 编辑 PDF 文件
本文将说明如何使用 PyPDF2 以及正则表达式操作 PDF 文件,并从中提取有关信息。
老齐
2021/12/08
3.1K0
超实用!Office三件套批量转PDF以及PDF书签读写与加水印
日常工作中,我们经常需要将 office 三件套,Word、Excel和PPT转换成PDF。当然办公软件自身都带有这样的功能,但当我们需要一次性转换大量的office文件时,还是用程序批量处理比较方便。
叶庭云
2021/12/07
3.1K0
超实用!Office三件套批量转PDF以及PDF书签读写与加水印
利用Python合并两个PDF文件
在许多情况下,您需要获取两个或更多PDF并将它们合并为一个PDF。例如,您可能有一个标准封面页,需要继续处理多种类型的报表。您可以使用Python来帮助您完成这类工作。
PM小王
2019/09/04
2.1K0
利用Python合并两个PDF文件
Python中通过PyPDF2实现PDF合并
PyPDF 2是一个纯python PDF库,能够分割、合并、裁剪和转换PDF文件的页面。它还可以向PDF文件中添加自定义数据、查看选项和密码。它可以从PDF检索文本和元数据,还可以将整个文件合并在一起。
全栈程序员站长
2022/09/07
1.1K0
Python中通过PyPDF2实现PDF合并
教你用Python 操作 PDF 的几种方法
作者 | 陈熹 来源 | 早起Python(ID:zaoqi-python) 01 前言 大家好,有关 Python 操作 PDF 的案例之前已经写过一个?PDF批量合并,这个案例初衷只是给大家
CDA数据分析师
2020/09/22
1.8K0
教你用Python 操作 PDF 的几种方法
用Python处理PDF
PDF作为可移植文档格式(Portable Document Format),在日常生活中经常接触到,最近处理一些数据更是频繁接触一些需要批量处理pdf文件的需求,因此便想整理一下自己实践的用Python处理PDF格式数据的笔记。本文会保持更新。PDF处理的高频需求有:读取、写入、格式转换(pdf提取文本写入txt、根据url写入pdf等) 、批处理(多个pdf合并为1个、切分pdf)等等。查了下相关资料,Python操作PDF的库有(只是应用的话肯定不至于造轮子从二进制数据开始读):pdfminer、pdfminer3k、PyPDF、PyPDF2、pdf2htmlex、pdf2image、pdf2xlsx等。
蛰虫始航
2019/09/29
1.8K0
Python自动化(二十) | 聊聊 Python 操作PDF的几种方法(合并、拆分、水印、加密)
一、前言 大家好,有关Python操作PDF的案例之前已经写过一个?PDF批量合并,这个案例初衷只是给大家提供一个便利的脚本,并没有太多讲解原理,其中涉及的就是PDF处理很实用的模块PyPDF2,本文
龙哥
2020/09/22
1.1K0
Python自动化(二十) | 聊聊 Python 操作PDF的几种方法(合并、拆分、水印、加密)
实用脚本!利用 Python 对 PDF 进行加密、解密操作,代码拿走就用!
本文将分享如何利用 Python 对 PDF 进行加密和解密操作,主要利用到之前多次介绍过的PyPDF2 模块。
崔庆才
2021/06/24
2.9K0
实用脚本!利用 Python 对 PDF 进行加密、解密操作,代码拿走就用!
还在傻傻付费合并 PDF 文件?
工作中,用到 PDF 文件的时候,真是太常见了。但你会发现,很多时候,我们需要将几份 PDF 合并为一个 PDF 文件,这个时候你往往会去百度,然后打开一个付费的 PDF 合并网站开始合并。
用户2966292
2021/05/28
7610
还在傻傻付费合并 PDF 文件?
在python中有多个对应的库可以操作Pdf文件,其中最常用的是Pypdf2
PDF是Portable Document Format的简称,意为“可携带文档格式”,是由Adobe Systems用于与应用程序、操作系统、硬件无关的方式进行文件交换所发展出的文件格式。
JQ实验室
2022/07/04
1K0
我怎么把拆分好的pdf保存在我创建的新文件夹里?
前几天在Python白银交流群【FN】问了一个Python自动化办公的问题,提问截图如下:
前端皮皮
2024/05/22
2700
我怎么把拆分好的pdf保存在我创建的新文件夹里?
python自动化办公——python操作Excel、Word、PDF集合大全
本文是鉴于有些粉丝的工作需求,有时候需要遇到这些文件的处理。因此,我写了一个文章集合,供大家参考,整篇文章已经整理成册(如下图所示)。由于文档获取人数太多,大家如有需求,请关注公众号:【数据分析与统计学之美】,回复关键词:【自动化文档】!
用户7886150
2021/01/24
2K0
Python处理PDF及生成多层PDF
Python提供了众多的PDF支持库,本文是在Python3环境下,试用了两个库来完成PDF的生成的功能。PyPDF对于读取PDF支持较好,但是没找到生成多层PDF的方法。Reportlab看起来更成熟,能够利用Canvas很方便的生成多层PDF,这样就能够实现图片扫描上来的内容也可以进行内容搜索的目标。
大江小浪
2018/07/24
2.1K0
Python操作PDF全总结|处理PDF文档不得不知道的两个库
Python在自动化办公方面有很多实用的第三方库,可以很方便的处理word、excel、ppt、pdf文件,今天我们就学习一下Python处理PDF文档的两个常用库「pdfplumber」、「pypdf2」。
吾非同
2021/01/20
3.8K0
【Python】给PDF添加水印
利用 PyPDF2 处理 PDF 文件,相关文档:https://pythonhosted.org/PyPDF2/
AXYZdong
2021/01/24
6K2
Python添加pdf水印
3、这种方式唯一的缺点就是效率极低,不适合大批量文件处理。用PDFlib处理效率会比这种方式高几十倍。可参考:用PDFlib给PDF添加水印(Python)
py3study
2020/01/07
1.6K0
推荐阅读
相关推荐
Python使用PyPDF2库进行PDF文件操作的详细教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验