怎样用通道实现流的多路复用? 有一对已经建立好的基于套接字的输入输出流,我想在它们的基础上实现两路复用,每一路有自己的双向交互协议,所以两路之间不能互相干扰,最简单的办法是建立两对套接字连接,分别得到一对输入输出流,来实现两路互相不干扰的协议,但这种方法显得很愚蠢,浪费资源,选择器模型让代码变得支离破碎,如果不用选择器模型,只想建立两路复用通道,然后用两个线程分别处理,该如何实现?高分求教。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 多路复用我只用过nio的选择器。不过看楼主好像并不想选择。交互协议都不同的话,我觉得你的方法就可以,而且容错和故障恢复都易于进行。起两个线程,监控两个端口。或者起三个线程,监控同一个端口,其中一个线程做协议解析和请求转发。 这个是可以通过协议进行区分的吧基于通信套字节,传送你自己封装的message[head,body]你的head可以消息长度、协议类型、请求|返回状态、成功|失败状态、请求|返回时间、body加密方式、请求id(用于控制请求流量)、请求操作id(用于区分操作)body请求入参、返回信息你每次套字节针对 message 进行 writer 和 reader即 meesage-> byte[] output.write(byte[])read.read(byte[]) byte[]->messagemessage 处理(区分协议类型) -> 得到返回 message服务端和客户端你没必要自己写,使用现有的框架就好了。 mina、xsocket 请问通过协议区分,如果不使用mina、xsocket,标准版Java支持吗? 只用jdk的库的话,也可以。第一,在不同的协议的头前面,得加一个协议ID进行区分。第二,为每一个协议生成单独的PipedInputStream、PipedOutputStream。然后读Socket的输入流,根据协议ID,写进不用的PipedOutputStream。然后每个协议就可以用自身的PipedInputStream读了。大致思路这样,具体得看自身的项目,然后进行优化。(我觉得最大的难度,应该在于防止PipedInputStream里面的数据过多,而同时得不到及时的处理) 纯用 jdk 写问题多多,需要解决的问题需要测试的问题太多了。感觉就协议上的message的封装 楼主考虑下自己做就好了。纯粹的使用 jdk block形式的 socket 楼主在client 端就必须考虑并发问题,服务端的问题就更多了。如果使用 jdk jnio ,说实话楼主你有信心写的很好吗? 为什么有开源的框架不使用了? 一个有关绘图机制里线程的问题 java绘图程序的遗留问题(上贴未解决,请各位一定帮忙!) Thinking In Java有争议点,期待高手回答 菜鸟MM求助高手,请帮忙!!!! IP数据包监控程序中出现的问题 setVisible,toFront但窗口不显示最前端 eclipse问题 高分求文件上传 请问有谁参加过scjd的培训?5天要7700大元?有什么收获啊?然后谁有比较好的scjd英文书推荐?谢谢 如何编译包?老是提醒找不到同一包里的待编译另一个类。 跪求正则表达式1, 2 请问, 正则表达式如何表示一个不是数字的字符?
交互协议都不同的话,我觉得你的方法就可以,而且容错和故障恢复都易于进行。起两个线程,监控两个端口。
或者起三个线程,监控同一个端口,其中一个线程做协议解析和请求转发。
消息长度、
协议类型、
请求|返回状态、
成功|失败状态、
请求|返回时间、
body加密方式、
请求id(用于控制请求流量)、
请求操作id(用于区分操作)body
请求入参、
返回信息
你每次套字节针对 message 进行 writer 和 reader
即
meesage-> byte[] output.write(byte[])
read.read(byte[]) byte[]->messagemessage 处理(区分协议类型) -> 得到返回 message
服务端和客户端你没必要自己写,使用现有的框架就好了。 mina、xsocket
第一,在不同的协议的头前面,得加一个协议ID进行区分。
第二,为每一个协议生成单独的PipedInputStream、PipedOutputStream。然后读Socket的输入流,根据协议ID,写进不用的PipedOutputStream。然后每个协议就可以用自身的PipedInputStream读了。
大致思路这样,具体得看自身的项目,然后进行优化。
(我觉得最大的难度,应该在于防止PipedInputStream里面的数据过多,而同时得不到及时的处理)
如果使用 jdk jnio ,说实话楼主你有信心写的很好吗? 为什么有开源的框架不使用了?