V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  cnbatch  ›  全部回复第 61 页 / 共 71 页
回复总数  1414
1 ... 57  58  59  60  61  62  63  64  65  66 ... 71  
2022-09-14 20:48:32 +08:00
回复了 dangyuluo 创建的主题 C++ 怎样在 C++里用 C-style 按行读取文件并不分配 heap 内存?
如果你的同事被要求“出了事你负责”还不怂的话,那就正好,把相关保证言论保存下来(最好能放到 Git 记录里面),一旦栈溢出就甩锅给他
2022-09-14 20:46:35 +08:00
回复了 dangyuluo 创建的主题 C++ 怎样在 C++里用 C-style 按行读取文件并不分配 heap 内存?
可以反问你的同事一句:那你能精确知道文件的每一行有多长吗?你能保证文件每一行不会超出预分配的固定大小?
重点在于“你能保证吗?”
言外之意就是:“出了事你负责”。
2022-09-12 01:22:17 +08:00
回复了 Rsplwe 创建的主题 Linux Linux 连接校园网的问题
要不试试 Wine
2022-09-12 01:00:14 +08:00
回复了 CitizenR 创建的主题 Apple 苹果当前的设计是分裂且令人失望的
@archiyuan V 站的回复框不支持 Markdown ,这个帖子的 15 楼就有人提到过:
https://www.v2ex.com/t/873359

所以只能手动简单地排版
2022-09-11 18:26:49 +08:00
回复了 996ywm 创建的主题 宽带症候群 关于申请公网 IP 的问题
既然都有 IPv6 了,那就直接用 IPv6 嘛
2022-09-09 17:57:18 +08:00
回复了 littlerainer 创建的主题 程序员 适合程序员 or 计算机研究生的轻薄笔记本选择
带独显的就不要考虑续航了。

另一个延长续航的方式,刚好上个月就有人发过测试程序:
https://www.v2ex.com/t/871732
(仅限 Windows 11 )
NPTv6 的标准化时间比较迟( 2011 年才完成制定),它的效果类似于 IPv4 的 NAT1 (一个内网 IP 独占地对应 1 个外网 IP )。
由于标准化时间太晚,以至于目前只有 FreeBSD (IPFW) 和 NetBSD (NPF) 内置支持跟随端口自动刷新的 NPTv6 (也就是运营商分发的 IPv6 发生变动时,NPT 转换规则能够自动随之更新)。

这项功能对于 IP 地址动态改变、多 WAN 口用户而言都很有用。

Linux 内置的 NPTv6 至今仍然只支持固定前缀的转换,因此现在能够支持 NPTv6 的设备确实不多。
@neroxps
@zhengrt
直接弄 NPTv6 ,也能保留 IPv6 的优势
2022-09-07 00:51:32 +08:00
回复了 LnTrx 创建的主题 宽带症候群 IPv6 环境下一机多 IP 玩法的讨论
@Jirajine 那当然是无感知、自动进行的更好,够方便,连脚本都不需要写。
要不然每次启动程序前都要想一想,“这个程序我有没有写脚本,啊,没写,先弄一个”。再加上一些比较冷门的、不太常用但偶然会用的软件,只会把脚本越弄越多。
需要自己写前置脚本的办法,总地来说并不是最方便的做法,而是临时解决方案。这样就没办法大量推广使用了。
如果在应用程序启动时,操作系统就自动做 IPv6 地址分配操作,全自动进行,那就能够连小白都能不知不觉的用上。
2022-09-06 15:26:02 +08:00
回复了 LnTrx 创建的主题 宽带症候群 IPv6 环境下一机多 IP 玩法的讨论
对于家用内网,其实还可以配置成内网 IPv6 私网地址 + 网关转换公网 IPv6 ,一对一转换,也就是 NPTv6 (可以看成是 NAT 的进化版)。这样的话,网关防火墙仍旧可以起作用,依然能够像 IPv4 时代那样手动指定 DMZ ,设定哪些主机允许外部主动连进来、哪些继续阻止主动入站。

目前内置 NPTv6 支持的就只有 FreeBSD ,其他系统只能靠第三方软件才能实现,变相等于阻碍了 NPTv6 的推行,导致基于 NPTv6 的方式目前还没人做出专门的 WebUI 配置项。
2022-09-06 15:14:18 +08:00
回复了 LnTrx 创建的主题 宽带症候群 IPv6 环境下一机多 IP 玩法的讨论
@Jirajine 这是需要手动操作,而不是全自动模式。全自动模式还是需要开发商修改一番的。
总不能每次打开浏览器都手动弄一次(哪怕用脚本),玩游戏弄一次,听音乐弄一次,打开 IM 软件再弄一次……
所以全自动还得有人给系统修改代码
2022-09-06 02:05:09 +08:00
回复了 LnTrx 创建的主题 宽带症候群 IPv6 环境下一机多 IP 玩法的讨论
单独给每个应用分配 IPv6 临时地址,这就需要操作系统的支持才行了。

不是做不到,毕竟现在已经可以做到单独让某个 /某类软件走特定通道。就看有没有人愿意贡献代码(仅限于开源系统),或者操作系统的开发商愿不愿意实现。
@cnbatch 忘了说,其实 PC 端也会遭遇移动端的“恶意软件伪装”。各大下载站可没少干这种事,更不用说针对这类 IM 了。
分几种情况

首先是移动端:

1:三大运营商的移动端基本上已经做到了 IPv6 全覆盖,所以 IP 地址在这里不是问题。
2:分发客户端是麻烦事,安卓尚且可以分发 apk ,苹果呢?不过也可以放弃支持苹果 iOS ,毕竟早已有先例,Syncthing 就是这样。
3:这个软件注定不可能在国内各大应用商店商家,所以只可能在 Google Play 出现
3.1:不少用户只能够自行下载 apk 并手动安装到手机上。
3.2:能够下载 apk 的网站很大可能性会被挡在外头。
3.3:于是,很有可能会有恶意软件假装成是这个 IM 的 apk ,诱骗用户安装。
4:现在国行手机的系统说不定已经全面内置审查功能,能够阻止用户安装特定软件(比如去年爆出的小米手机阻止安装各种 VPN 软件)。
4.1:因此,他们完全可以做到阻止用户安装该 IM ,甚至主动卸载该 IM 。


接下来说 PC 端(桌面系统):

1:只有部分地区的宽带会给用户分配 IPv6 ,可惜普及率还是不算高,这样一来就必须借助中心服务器的帮助,或者借助双栈公网的用户的帮忙。
1.1:中心服务器的相关讨论,大家已经说了很多,不再重复。
1.2:双栈公网的用户虽然也有不少(“宽带症候群”里面可以找到一大堆),但占用户总数的比例还是太少了,更何况不可能要求所有双栈公网用户都用这个 IM 。
2:分发安装包给用户相对移动端来说倒是简单不少,自己想办法去官方网站下载就行。
3:最需要注意的是杀毒软件,他们完全可以把这款 IM 当成病毒杀掉。
3.1:国外杀软倒是容易解决,应用自带签名,and/or 把 IM 提交给杀软公司免误杀,都行。
3.2:国产杀软无解。
3.3:可以教用户把 IM 所在的文件夹设置成白名单,但谁知道国产杀软理不理会呢。
4:除了国产杀软,还有国产系统,操作同上。虽然用户量应该无限接近零,但谁知道会不会真有人这么干呢。
2022-09-05 16:15:28 +08:00
回复了 justanetizen 创建的主题 程序员 推荐一个不错的 Cplusplus 网络库
事先声明,我不是游戏行业。

首先,推荐某样东西,肯定需要跟大家说“为什么”、“好在哪”吧?尤其是标题写着“不错”两个字,那么是哪方面的“不错”?然而重新看看这个帖子,除了贴了个链接,什么都没讲。这给人一种很莫名其妙,甚至有一种“广告”的感觉。

第二,再看看链接,显然连接到错误页面了( 1 楼就有提到),会给人一种“敷衍”的感觉。不清楚这是 V2EX 的自动替换还是怎样。


既然没说好在哪,那就进去看看它的各种特点,并随意点评。

1, “TCP 粘包”这种说法早就被 V2EX 的各种讨论贴吐槽过很多次,总地来说大家的观点是,讲出“TCP 粘包”这种字眼等于主动引战,属于不专业的表现。

2 ,使用 O_NONBLOCK + std::thread 算不上“不错”,这纯粹为了省事,“能用就行”。再看一眼介绍,“专注于客户端”,难怪。由于是在客户端跑,一般只会建立个位数的连接,所以大多数情况下都无所谓,察觉不出。

3, 为了搞清楚为什么作者会“偷懒”,自然要进去看看它的介绍,包括 Github 页面。看完后发现,原来作者的着重点并不是单纯的“异步”,而是为了给游戏同行提供一个集成化的、一站式的解决方案,免得每次使用其他异步库时都需要重新手写代码处理诸如“TCP 流数据拆包”、叠一层 KCP 库、游戏引擎交互之类的麻烦事。

看得出,作者的精力都放在游戏引擎交互、游戏脚本语言的交互、游戏行业常用网络功能的整合。

结论就是,这个库是专门为游戏行业量身打造的。它所带的特色功能,其他人几乎用不上。



接下来,你从 emacs 解释了为什么会关注这个库,原来是因为“多线程”和“异步 IO”的支持。

既然如此,那我就只好作出提醒,支持多线程和异步 IO 支持是各大 C++网络库的基础性操作,并不是特色、特点,也不是专属优点。
除了前面提到的另外 4 个库,实际上其他的 C++网络库,或者带网络支持的 C++库,也是这样。

比如阿里巴巴的 PhotonLibOS:
https://github.com/alibaba/PhotonLibOS/blob/main/net/kernel_socket.cpp
搜索下就可以看到,用了 pthread (多线程),epoll (异步 IO )
2022-09-04 20:42:48 +08:00
回复了 justanetizen 创建的主题 程序员 推荐一个不错的 Cplusplus 网络库
真奇怪,代码本身就是开源的,介绍也是现成的,完全可以自己看的呀……
而且我前面那些,哪句话说错了?

也行,那就列一次出来,包括代码和它们各自的说明:

yasio:
首页自己的介绍:“专注于客户端和基于各种游戏引擎的游戏客户端网络服务”

内置 KCP:
https://github.com/yasio/thirdparty/tree/0264931f4af65f9532863d37c2cc206604d16918

游戏引擎支持:
https://github.com/yasio/yasio_unity
https://github.com/yasio/yasio_unreal

TCP 流数据拆包(“粘包”):
https://yasio.github.io/yasio/3.39.4/unpacking/

以上都是其它异步网络库不具备的。


C++asio:
https://think-async.com/Asio/asio-1.24.0/doc/asio/using.html
预定义 ASIO_DISABLE_THREADS 可关闭多线程支持。
即默认使用多线程。
至于“异步”,名字就说明一切了。

libev:
https://github.com/enki/libev/blob/master/ev.c#L768
https://stackoverflow.com/questions/14621261/using-libev-with-multiple-threads
http://blog.leanote.com/post/simon88/2f29107bd8dc (第三方博客)
https://developer.aliyun.com/article/801557
可以看出,能够自行选择多线程还是单线程模式

https://metacpan.org/dist/EV/view/libev/ev.pod
说明文档,搜索“async”可以看见异步的说明

libevent:
https://libevent.org/
人家首页直接就说了:Libevent can also be used for multi-threaded applications, either by isolating each event_base so that only a single thread accesses it, or by locked access to a single shared event_base.
关键部分—— [也] 能支持多线程
意思就是默认单线程,但同样可以多线程
更进一步的说明: https://quant67.com/post/ioevent/multithread-libevent.html (第三方网站)
如何使用 libevent 实现异步网络编程:
https://gist.github.com/ajhwb/3685796

libuv:
https://github.com/libuv/libuv
项目说明直接就写了出来:
Asynchronous TCP and UDP sockets
Asynchronous DNS resolution
Asynchronous file and file system operations
Threading and synchronization primitives
清清楚楚。
2022-09-04 20:01:32 +08:00
回复了 justanetizen 创建的主题 程序员 推荐一个不错的 Cplusplus 网络库
@justanetizen 并不是在杠,而是觉得你的关注点(是各个库都有的共性,只不过 yasio 列了出来而已)完全偏离了人家原作者的关注点(游戏行业的痛点),人家原作者并不是仅仅为了“多线程”而多线程、为了“异步”而异步。

我列了这么一堆字是告诉你原作者的关注点是什么。
2022-09-04 19:26:19 +08:00
回复了 sunwq 创建的主题 程序员 五笔小程序
说起五笔,三种五笔方案真的有点折磨人。
对于有些字,三种方案中总有一种不一样的。就用小程序查询的字举例:

概——86: svc, 98: svaq, 新世纪: svcq [86≈新世纪]
其——86: adw, 98:dwu, 新世纪: adwu [86≈新世纪]
商——86: um, 98:yumk, 新世纪: yumk [98=新世纪]
乃——86: ent, 98: bnt, 新世纪:bnt [98=新世纪]
灣——86: ixyx, 98: iyxx, 新世纪: iyxx [98=新世纪]
寫——86: pvqo. 98: peqo, 新世纪: peqo [98=新世纪]

新世纪版被认为是 86 版的改良。
要是王永民再来一次心血来潮,在 98 版的基础上再来一次“改良”,那就真是会导致新学习的人遭遇“选择困难症”
2022-09-04 19:01:44 +08:00
回复了 sunwq 创建的主题 程序员 五笔小程序
五笔 06 ?确定没写错?
新世纪版是在 2008 年 1 月 28 日推出的,所以“五笔 06”应该是指“五笔 08”?
2022-09-04 18:13:30 +08:00
回复了 justanetizen 创建的主题 程序员 推荐一个不错的 Cplusplus 网络库
仅仅是因为“多线程”和“异步 IO”啊……

对于 yasio 的 FAQ 提到的其它网络库库 (asio libevent libev libuv) 来说,“异步 IO”本身同样就是标配,这没什么好说的。这几个库一样都支持多线程,其中部分默认多线程的库可以配置成单线程异步 IO 模式,默认单线程的库也提供多线程环境的支持。

可以说,如果仅仅只是“多线程”和“异步 IO”,那么另外那几个库同样达标,而且做得更好。

yasio 的“亮点”在于“粘包处理”(从 TCP 流数据中自动拆出所需数据),要不然它也不会醒目地单独放在目录列出来;以及内置 KCP 库(游戏行业比较喜欢使用 KCP 传数据),在“预处理器”那里有提到;还有跟部分游戏引擎的交互支持,在 Github 说明那里有提到。
这些显然不是你的关注点。
1 ... 57  58  59  60  61  62  63  64  65  66 ... 71  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2728 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 28ms · UTC 12:06 · PVG 20:06 · LAX 04:06 · JFK 07:06
Developed with CodeLauncher
♥ Do have faith in what you're doing.