前端通信

Node中的net模块提供的前端通信
H5提供的 webSocket 【 常用于 移动端 】
pc端低版本浏览器使用 socket.io
通信
- 服务端: 总的服务器 举例: 腾讯的qq服务器 1个整体
- 客户端: 单个用户使用应用 举例: 每个人的qq 多个
client.js
客户端 业务:客户端现在要在终端输入内容,然后回车发送内容给服务器
解决: Node中提供了一个叫做  readline 的 模块用于读取命令行内容 【 单行读取 】
const net = require( 'net' )

const socket = net.Socket()

const host = 'localhost'

const port = 5000

const readline = require( 'readline')

socket.connect( port,host, () => {
  socket.write( 'hello 我上线了' )
})

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

socket.on('data', msg => {
  console.log( msg.toString() )
  say()
})

socket.on( 'error', ( error ) => {
  console.log( 'error is : ' + error )
})

socket.on( 'close', () => {
  console.log( `客户端下线了` )
})

function say () {
  rl.question('请输入:', ( answer ) => {
    if( answer === 'bye' ){
  
      socket.destroy()
      rl.end()
    }else{
    
      socket.write( answer )
    }
  });
}
//服务端server.js
const net = require( 'net' )
const server = net.createServer()
const host = 'localhost'
const port = 5000
let count = 0
const clients = {}   
server.on('connection', ( client ) => {
  client.name = ++count 
  clients[ client.name ] = client

  client.on( 'data', msg => {
  
    console.log( `客户端${ client.name }说:${ msg.toString() }` )
    boardCaster( client,msg )
  })

  client.on( 'error', error => {
    console.log( 'error is: ' + error )
  })

  client.on( 'close', () => {
    delete clients[ client.name ]
    console.log( `客户端${ client.name }下线了` )
  })

})

function boardCaster ( client,msg ) {

  for( var key in clients ){
    // clients[ key ].write( `谁说了什么` )
    clients[ key ].write( `客户端${ client.name }说:${ msg.toString() }` )
  }

}

转载于:https://www.cnblogs.com/yangjin0514/p/11205979.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java定位线程阻塞_Arthas - 定位 Java 性能问题原来这么简单

目录:一、Arthas 介绍二、Arthas 使用场景三、Arthas怎么使用四、Arthas 定位性能问题定位Java代码导致占用CPU高的问题线程死锁前言:在做性能测试的过程中,当遇到Java性能问题,比如CPU飙升,负载突高,内存溢…

SVN 本地文件锁/服务端文件锁清除步骤

1.本地文件锁,直接cleanup,cleanup界面选择break locks即可 2.服务端文件锁,本地文件右击没有release lock或者break lock的选项时 方法1:右键,svn选择browser repo,找到该文件,右击&#xff0c…

java 对象复活_Java对象复活

java 对象复活总览 收集覆盖了finalize()的对象之后,将其添加到终结处理队列中,以在调用每个对象的finalize()方法之后进行清理。 如果您复活了物体,会发生什么? 何时定案&#xff…

a b和c 15 java_1011. A+B和C (15)

给定区间[-231, 231]内的3个整数A、B和C&#xff0c;请判断AB是否大于C。输入格式&#xff1a;输入第1行给出正整数T(<10)&#xff0c;是测试用例的个数。随后给出T组测试用例&#xff0c;每组占一行&#xff0c;顺序给出A、B和C。整数间以空格分隔。输出格式&#xff1a;对…

深入浅出《设计模式》之工厂模式(C++)

前言 模式介绍 在之前简单工厂模式中&#xff0c;我们介绍了简单工厂模式的缺陷是违背了开放-封闭原则。如果在面馆中添加了烤海参&#xff0c;那将会修改waiter工厂类。违背了类内封闭原则。 还以面馆为例&#xff0c;现在两种面&#xff0c;用一个服务员来卖就可以&#xff0…

当心Spring缓慢的事务回调

TL; DR 如果您的应用程序无法获得新的数据库连接&#xff0c;则重新启动ActiveMQ代理可能会有所帮助。 有兴趣吗 性能问题 几个月前&#xff0c;我们经历了生产中断。 大家都很熟悉&#xff0c;许多请求都失败了&#xff1a; java.sql.SQLTransientConnectionException: Hika…

jmeter学习笔记(八-1)

Jmeter中有较多需要参数化测试的地方&#xff1a; 1.从一个用户登录的接口获取登录后的token值&#xff0c;取值后用于后续接口调用 2.获取用户浏览后的cookies信息&#xff0c;需要用到HTTP Cookie 管理器来为同一线程组提供通用的cookies信息 Jmeter中通过${}形式来取参数值 …

python 对象转dict_如何将python dict对象转换为java等效对象?

总是有jython。这里有一点来自this article&#xff0c;它提供了python/java的良好并排视图The Jython analogues to Javascollection classes are much moretightly integrated into the corelanguage, allowing for more concisedescriptions and useful functionality.For e…

NOIP模拟测试5「星际旅行·砍树·超级树」

星际旅行 0分 瞬间爆炸。 考试的时候觉得这个题怎么这么难&#xff0c; 打个dp&#xff0c;可以被儿子贡献&#xff0c;可以被父亲贡献&#xff0c;还有自环&#xff0c;叶子节点连边可以贡献&#xff0c;非叶子也可以贡献&#xff0c;自环可以跑一回&#xff0c;自环可以跑两回…

学java选i5还是i7_选笔记本电脑,到底CPU是要选i5还是i7

又到了一年毕业季&#xff0c;准备上大学的学生们肯定是摩拳擦掌&#xff0c;准备入手一台新的笔记本电脑。而我们在选购笔记本电脑的时候&#xff0c;经常会遇到不同的配置&#xff0c;比如说同一台笔记本电脑会有i5以及i7两个处理器可供选择&#xff0c;而价格往往相差一两千…

apache apollo_Apache Apollo REST API

apache apolloApache Apollo是新一代&#xff0c;高性能&#xff0c;多协议的消息传递代理&#xff0c;它是从头开始构建的&#xff0c;可以替代ActiveMQ5.x。 我过去曾在博客上发表过文章 &#xff08;第一部分已经与第二部分一起发布了&#xff09;。 Apollo的无阻塞异步体系…

Node 之 模块加载原理与加载方式

Node.js中的模块可以分为原生模块和文件模块&#xff0c;通过Node.js中可以通过require方法导入模块、exports方法导出模块。 1、require导入模块 对于原生模块&#xff08;比如说&#xff1a;http&#xff09;&#xff0c;只需要使用require&#xff08;‘http’&#xff09;导…

php excel 下拉菜单,使用 PHPExcel 遇到的一个问题:下拉列表的数据来源过长时,显示了别的正常的下拉列表的数据来源...

遇到的问题&#xff1a;我们还是先来看手册是怎么说的&#xff1a;It is important to remember that any string participating in an Excel formula is allowed to be maximum 255 characters (not bytes).当下拉列表的数据来源过长(more than 255 characters)时&#xff0c;…

有效的Java –创建和销毁对象

创建和销毁对象&#xff08;第2章&#xff09; 这是Joshua Blochs的《 有效的Java》第2章的简短摘要。我仅包括与自己相关的项目。 静态工厂&#xff08;项目1&#xff09; 静态工厂与构造函数的一些优点&#xff1a; 工厂方法的名称为构造函数添加了描述 他们可以返回预先构…

【洛谷P2743】【poj 1743】[USACO5.1]乐曲主题Musical Themes

题目 还是板子题 因为旋律会同时加减一个数&#xff0c;所以我们在差分数组上做就好了 注意因为差分了&#xff0c;跨越的个数要少一个 基数排序循环写反了&#xff0c;调了好久 qwq /* Date : 2019-07-19 10:17:22 Author : Adscn (adscnqq.com) Link : https://www.cn…

exec导入 php,PHP exec运行一个文件

我正在尝试最后3个小时告诉PHP运行一个简单的文件.我在本地主机中使用wamp服务器用于Windows(Windows 8)我尝试过使用exec()&#xff1a;echo exec(whoami);我得到了权威的回应.还测试了&#xff1a;if(function_exists(exec)) {echo "exec is enabled";}它可能有用吗…

远程连接Oracle 数据库连接报错ORA-12638身份检索失败

数据库版本&#xff1a;oracle11g 当使用navicate或者PLsql使用远程连接服务器的数据库的时候报错 RA-12638身份检索失败 因为是更换了个新电脑出现这种问题了&#xff0c;所以可以排除时服务器数据库的问题&#xff0c;问题应该出现在oracle的客户端上面&#xff1b; 通过修改…

java生成顺丰电子面单,顺丰拼多多电子面单设置教程

100%使用使用拼多多电子面单&#xff0c;无需解密&#xff0c;即可打单发货&#xff0c;让打单更加流畅&#xff0c;减少出错&#xff01;不少商家有疑问&#xff0c;顺丰是月结的合作模式&#xff0c;不用充快递单号&#xff0c;是不是不支持拼多多电子面单呢&#xff1f;当然…

list.action.php,doAction.php里代码可以这样写,大大减少了重复的代码

//接收页面$mysqlinew Mysqli(localhost,root,root,test);if($mysqli->connect_errno){die(Connect Error:.$mysqli->connect_error);}$mysqli->set_charset(utf8);$username$_POST[username];$username$mysqli->escape_string($username);$password$_POST[passwor…

[Jobdu] 题目1530:最长不重复子串

题目描述&#xff1a;最长不重复子串就是从一个字符串中找到一个连续子串&#xff0c;该子串中任何两个字符都不能相同&#xff0c;且该子串的长度是最大的。 输入&#xff1a;输入包含多个测试用例&#xff0c;每组测试用例输入一行由小写英文字符a,b,c...x,y,z组成的字符串&a…