V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  xinhochen  ›  全部回复第 1 页 / 共 1 页
回复总数  17
2023-06-21 09:05:19 +08:00
回复了 LeviMarvin 创建的主题 程序员 2023.06 求扫描复印打印一体机
我家去年买的兄弟 Brother DCP-T725DW ,满足你的所有要求,微信小程序远程打印尤其好用
说一个场景:用户在页面订阅由 websocket 推送的数据,关闭页面后需要移除订阅关系。当用户打开多个页面或者不同客户端使用,对于这个订阅关系的维护就用到了锁。当然,这个锁可能是提前实现好的组件内部使用的,开发者可以不用关心。
2022-10-19 13:41:06 +08:00
回复了 K120 创建的主题 问与答 现在做开源项目不容易啊
#3 在注释里,我也找了一圈才找到
2022-09-13 09:51:32 +08:00
回复了 VZEXEZVzzz 创建的主题 iOS 有没有带代理功能的浏览器 APP?
Yandex ,可以自己装 chrome 的代理插件
2022-07-06 17:42:20 +08:00
回复了 luxinfl 创建的主题 程序员 这种去重方法真的有用么
我觉得这样写更容易理解一些:
Set<String> filter = new HashSet<>();
List<Student> result = studentList.stream().filter(o -> filter.add(o.getName())).collect(Collectors.toList());
2022-04-27 16:04:35 +08:00
回复了 max58 创建的主题 Java 如果使用 Java 去实现将镜像放到容器中并启动这个操作
Runtime.getRuntime().exec("docker run xxx")
@ReinerShir Encoder 就是自己继承 MessageToByteEncoder,然后实现 encode 方法。当然你那种把 AABB 和 EEFF 放在 writeAndFlush 里也是可以的,但是万一协议有变化,修改的工作量就大了,这就是为什么有 Encoder 存在的原因。
设备收到这种是非常正常的,需要设备那边对收到数据做处理,就和你在 netty 里对 EEFF 做处理是一样的。TCP 里的数据是流式的,一次收到的数据不全,或者收到多余的数据都是再正常不过的事了。
@ReinerShir 只有 Decoder,没有 Encoder 么?一般来说,发消息过去,也需要有分隔符之类的。要不然就会遇到你说的这种心跳和指令在一起的情况。
@ReinerShir 这种情况只能从消息定义上着手了,方案很多:分隔符(需要额外定义转义符,对应 netty 里的 DelimiterBasedFrameDecoder )、长度字段(对应 netty 里的 LengthFieldBasedFrameDecoder)
补充运营商核心网的相关信息:设备断电后,netty 与运营商核心网的连接不会"马上"断开
@ReinerShir 设备如果用的 SIM 卡,要考虑运营商核心网的影响:设备断电后,netty 与运营商核心网的连接不会断开。建议把相关日志全部发上来看下,而不是截取部分,避免因为思维盲点遗漏了关键信息。
@ReinerShir 代码中有没有其它主动关闭 channel 的地方?如果没有,最好是抓 tcp 包,看设备日志,看程序日志。这三个放在一起分析,基本就能发现问题了。程序日志只能说明 channel 断开了,并不能说明是谁断开的。
可以抓下 TCP 包来看看新连接的断开是谁主动发起的,看下是 netty 还是设备
2021-03-25 11:13:23 +08:00
回复了 sujunjie520 创建的主题 Java 想问下大佬们 关于 netty 自定义消息类的问题
没看到 Encoder,不好说。
不过大体思路就是 setCmd()那里加一个 CommandType.FILE_UPLOAD,setData()里面把文件的 byte[]放进去。
要看 Encoder 的实现来考虑是否需要添加新的 Encoder,或者在现有 Encoder 中添加新逻辑
格式化一下再看:
function rstr2binl(input) {
var i;
var output = [] output[(input.length >> 2) - 1] = undefined;
for (i = 0; i < output.length; i += 1) {
output[i] = 0;
}
var length8 = input.length * 8;
for (i = 0; i < length8; i += 8) {
output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32;
}
return output;
}
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2523 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 22ms · UTC 00:30 · PVG 08:30 · LAX 16:30 · JFK 19:30
Developed with CodeLauncher
♥ Do have faith in what you're doing.