V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Joker123456789  ›  全部回复第 17 页 / 共 27 页
回复总数  527
1 ... 13  14  15  16  17  18  19  20  21  22 ... 27  
2021-04-20 21:41:44 +08:00
回复了 Joker123456789 创建的主题 推广 网络编程包 - Magician 的原理 与 使用
@GuuJiang 好的, 我会去看的。

然后回答一下你的问题, 当没有数据进来的时候,我这个程序是等待状态,accept 自动阻塞住了 不会返回任何东西 就停在那。 队列的 take 方法也阻塞住了,就停在那。 整个程序除了主线程挂在那,就没任何动作了。

然后我问你一个问题, 消费 selectionkey 的那个 while 是不是有被业务阻塞的可能? 你可能会说 在 while 里开线程 让业务线程去处理。 但问题是 在业务线程跑完之前 channel 是不能关的。 因为 http 客户端需要等待响应, 必须等业务跑完 并把响应写入 channel 才能关吧。 而 channel 不关的话,while 会进入下一次循环,select 方法会再次为这个连接生成 selectkey, 这样一来就出现重复处理了。 这个问题是我真实遇到的问题。 如果你有办法解决, 那你可以说出来。

多路复用器 是系统层面的, 到了应用层 就是单线程在一个个消费 selectkey, 如果这个你觉得不对也欢迎 指正。并说出具体哪里不对。

最后你可以去看一下 nio 的 Reator 的分发模型, 是不是跟我这个有点像。
2021-04-20 16:12:06 +08:00
回复了 Joker123456789 创建的主题 推广 网络编程包 - Magician 的原理 与 使用
@guyeu 不过,第 5 点 是支持的, 监听两个端口即可。
2021-04-20 16:03:58 +08:00
回复了 Joker123456789 创建的主题 Java 有个问题我不明白
@msaionyc 分享和推广的 分界线 本身就是模糊的吧? 同样是这件事,我如果自始至终用的词语都是 分享,你还会找到这个刺吗?

第二,你得注意语境, 反驳喷子的时候 说出来的话 是可以如此理性的看待的吗?
2021-04-20 15:55:14 +08:00
回复了 Joker123456789 创建的主题 推广 网络编程包 - Magician 的原理 与 使用
@guyeu

说实话,你这段话有点感动到我了。真的。

我会认真考虑你的建议,并在后面尽可能优化上。
2021-04-20 15:50:51 +08:00
回复了 Joker123456789 创建的主题 推广 网络编程包 - Magician 的原理 与 使用
@learningman 我只是做了一个支持 这三个协议的包,你跟我扯 网络模型干嘛? 没东西喷了 就来吐槽我的目录结构吗?
2021-04-20 15:50:03 +08:00
回复了 Joker123456789 创建的主题 推广 网络编程包 - Magician 的原理 与 使用
@D3EP

1. 队列的 take 方法 会自动检查队列是否为空,如果为空是不返回的 ,直接阻塞在那,所以不存在空转。

2. 多路复用,那是系统层面的,到了应用层还是一个线程在消费。Selector 确实是一个线程 可以处理多个 TCP 连接,但是他是在 while 里排队一个个处理的。 这跟我的模型区别不大吧? 我也是每一个线程 都在处理排着队的多个 tcp 。

3. 配置几个线程 就是几个线程同时跑,不会因为请求多了就线程暴增,怎么会打满 CPU ?

4. 你说的线程没有隔离 可否详细一点? 对于这一条,我是真的想虚心请教的。
2021-04-20 14:16:16 +08:00
回复了 Joker123456789 创建的主题 Java 有个问题我不明白
@Resource 是您主动跟我争的,谢谢。
2021-04-20 14:12:02 +08:00
回复了 Joker123456789 创建的主题 Java 有个问题我不明白
@Resource 最后 请您解释下 为什么 这种应该丢到垃圾桶? 是您觉得 spring 不配被研究原理呢,还是 spring 不配被称为技术?
2021-04-20 14:09:47 +08:00
回复了 Joker123456789 创建的主题 Java 有个问题我不明白
@Resource

你搞清楚一件事啊,我现在并不是在抱怨没人用我的东西。 所以 跟姿势有啥关系? 而且我如果不提高姿势 我能写出项目来?

而是,明明在分享一个正儿八经的开源项目,却要被喷 是我所不能理解的。
2021-04-20 14:02:20 +08:00
回复了 Joker123456789 创建的主题 Java 有个问题我不明白
@Resource 你找出我的这个帖子 是想说什么。可否明示?
2021-04-20 13:57:07 +08:00
回复了 Joker123456789 创建的主题 Java 有个问题我不明白
@liprais 懂了,改天我叫别人来发帖子。
2021-04-20 13:36:11 +08:00
回复了 Joker123456789 创建的主题 推广 网络编程包 - Magician 的原理 与 使用
@Livid 如果真的要按规矩来,这个帖子应该在 分享创造 节点。 谢谢。
2021-04-20 13:25:41 +08:00
回复了 Joker123456789 创建的主题 推广 网络编程包 - Magician 的原理 与 使用
@GuuJiang 找了个 槽点出来,吐槽了一番,后来发现自己看错了代码, 然后 就吐槽我对协议的理解有问题。

当我解释了优势 以及协议的关系后, 来一句“你开心就好”。

哎~,真的是。。。一言难尽。
2021-04-20 13:15:11 +08:00
回复了 Joker123456789 创建的主题 推广 网络编程包 - Magician 的原理 与 使用
@GuuJiang 优势在于可以控制线程数量啊。 使用者可以自己配置 要几个线程来进行消费。 而不是只有一个 while 在那消费 selectionskey 。

还有,http,websocket 都是给予 tcp 的吧,websocket 甚至需要先发一个 http 来建立连接,所以 http 和 websocket 都放在 tcp 的包里 没什么问题吧?

upd 是另一种协议,我也是放到另一个单独的包里了。而且 udp 我就是用的 selector,因为他不需要保持连接到响应结束,因为他不需要响应,所以我可以在数据读完以后 再开线程去消费,这样就不存在重复操作 channel 的问题了。
2021-04-20 13:06:38 +08:00
回复了 Joker123456789 创建的主题 推广 网络编程包 - Magician 的原理 与 使用
@GuuJiang selector 确实是精髓,但是精髓 就在于 并发高了不会造成线程太多啊,因为他是用一个线程在消费 selectionkey,我不是在文章里说过了吗?

如果你觉得可以在 while 里开线程,那你就去试试,试完了再说话。

这句代码会把当前的连接 放到 selectionkeys 里
```java
int select = selector.select();
```

而 http 需要将连接保持到响应结束,如果你开线程去做别的事,这件事做完之前 连接是不会关闭的,会导致这里将 channel 再一次的取出来,造成重复消费。不信可以自己尝试。

不过话说回来,while 里开线程,和我这个模型有啥区别呢? 不都是把 channel 丢给线程去处理,有区别吗?
2021-04-20 12:58:01 +08:00
回复了 Joker123456789 创建的主题 推广 网络编程包 - Magician 的原理 与 使用
@GuuJiang
哦对了,还有一点,我分享原理 是想让大家对这个东西了解多一些,从而决定自己要不要使用。并不是拿来炫耀的。

你所谓的没价值,只是你认为,有没有价值取决于 每个人的 实际需求。

最后呢,建议你看代码的时候仔细一点,你点的那个 package 明明就是 websocket 而不是 http,这都没看出来吗?
2021-04-20 12:51:40 +08:00
回复了 Joker123456789 创建的主题 推广 网络编程包 - Magician 的原理 与 使用
@learningman

来,说出你的观点。 不要直接一句反问,因为我不懂你的意思。
2021-04-20 12:51:02 +08:00
回复了 Joker123456789 创建的主题 推广 网络编程包 - Magician 的原理 与 使用
@GuuJiang

100 毫秒的 那个你是不是看错了? 那个是 websocket 。 连接上了以后 需要实时监控 channel 里有没有消息。
而且这个一看就知道 不是 http 了啊,跟我文章是描述的原理完全不搭噶,你是怎么理解到一起的?

建议你重新看一下 http 的实现部分。

还有这句: [至于“如果业务比较耗时,会造成整个循环被堵住”,这个跟是否用 Selector 根本没关系,而是使用者自己应该保证不在 IO 线程里处理耗时业务]

你可以试一下 在 select 的 while 里开线程试试,你去试一下就知道了。

第三线程池确实是这个原理,但是这有什么问题?
2021-04-20 10:54:19 +08:00
回复了 Joker123456789 创建的主题 推广 网络编程包 - Magician 的原理 与 使用
@guyeu 而且,这个节点是 java,我发的也是 java 项目,而且是开源非商业, 我不觉得有啥大问题。 如果真的冒犯到了这里的规矩,我接受管理员的删帖 甚至封号。
2021-04-20 10:52:56 +08:00
回复了 Joker123456789 创建的主题 推广 网络编程包 - Magician 的原理 与 使用
@guyeu

1. 推广当然要发在人多的地方,推广节点有人看吗? 你会去一个全是广告的节点翻帖子??? 如果你有意见可以举报一波,让管理员来删帖。轮不到你喷我。
2. 我好像全文都没跟 netty 对比吧?你突然冒出一句 看不出来比 netty 高级在哪,我很懵逼啊。
1 ... 13  14  15  16  17  18  19  20  21  22 ... 27  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1498 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 14ms · UTC 17:07 · PVG 01:07 · LAX 10:07 · JFK 13:07
Developed with CodeLauncher
♥ Do have faith in what you're doing.