坐在靠窗的工位上,林辰并没有急于开始编码。他先是花了一些时间,熟悉这台“新”电脑的环境。
操作系统是 windows Nt 4.0,开发环境主要是 Visual c++ 6.0 和刚兴起不久的 delphi,角落里还躺着一个装着 Redhat Linux 5.1 光盘的盒子。
机器性能比宿舍那台老古董强不少,但和他前世用惯了的云开发环境相比,依然是天壤之别。
他熟练地打开资源管理器,检查磁盘空间,又调出任务管理器看了看内存占用——基地的机器果然也跑着不少后台服务,资源并不宽裕。
这种“抠抠搜搜”的环境,反而激起了他的斗志。在有限资源下做出极致性能,不正是这个时代程序员的浪漫吗?
“怎么样,还习惯吗?”周斌端着一个印着“清华大学”字样的搪瓷杯走了过来,杯口冒着热气,茶叶梗在里面沉沉浮浮。
“挺好的,比宿舍条件好多了。”林辰笑着回应,“谢谢学长。”
“别客气,以后就是自己人了。”周斌靠在隔断上,压低声音,“刚才吴峰就那脾气,技术宅的通病,眼里只有代码和逻辑,人情世故差点意思。不过人不错,遇到真解决不了的技术难题,找他准没错。”
“明白,我觉得这样挺好,直接,高效。”林辰表示理解。
“嗯,你能这么想最好。”周斌点点头,喝了口茶,“对了,既然你们团队都加入基地了,bbS的服务器是不是可以考虑迁过来?这边网络更稳定,运维也方便。信息中心那边总抱怨你们占用了太多出口带宽。”
这正是林辰所期待的。他立刻点头:“没问题,我们尽快安排迁移。不过学长,迁移过程中可能需要短暂停机,还得麻烦基地这边提供技术支持。”
“小事儿,我跟运维组的同学打个招呼,你们配合着来。”周斌大手一挥,很是爽快,“还有,你们那个‘开放qq’的项目,有什么需要也可以提。基地虽然资源紧张,但对有潜力的项目,还是会倾斜支持的。”
“太感谢学长了!”林辰心中一定,有了基地官方层面的支持,很多事就好办多了,“我们目前最需要的是一个更稳定的开发测试环境,以及……如果可能的话,希望能申请到一些独立的带宽资源,用于后续的通信协议测试。”
“开发环境好说,那边还有几台空闲的机器,我给你们划两台。”周斌指着机房角落,“带宽嘛……我得跟王老师申请一下,问题应该不大。不过林辰,”他话锋一转,语气带着提醒,“基地有基地的规矩,资源不是白给的。
每个季度会有项目评审,进展不佳或者方向不受认可的项目,资源可能会被收回。而且,基地鼓励技术共享和协作,你们的核心代码,虽然不要求完全开源,但在关键技术上,最好能对基地成员有所启发。”
这就是代价了。林辰心知肚明。他需要贡献自己的技术影响力,来换取实实在在的资源。
“我明白,学长。”林辰郑重承诺,“我们会定期分享技术心得,也会积极参与基地的其他项目。”
“好!就喜欢你这种明白人!”周斌满意地拍了拍林辰的肩膀,“那你先忙着,有什么需要随时找我。”
送走周斌,林辰深吸一口气,开始动手配置开发环境。他决定将“开放qq”的核心服务端代码迁移到 Linux 环境下,这对于未来的高并发处理和跨平台部署更有优势。而在 windows 下,则主要进行客户端界面和部分辅助工具的开发。
正当他埋头折腾 gcc 编译参数时,一个身影悄无声息地出现在他旁边。
是吴峰。
他手里拿着一张打印出来的纸,上面似乎是某种协议分析的日志。
“林辰,”吴峰的语气依然没什么起伏,但少了之前的挑衅,“你刚才提到的‘事件驱动异步Io’,在 Linux 下,除了 select,是不是用 poll 或者 epoll 更好?我看过一些文章,说 select 有文件描述符数量的限制。”
林辰停下手中的动作,有些意外,但很快反应过来。技术人之间的交流,往往就是这么直接。你展示了实力,就赢得了对话的资格。
“峰哥说得对。”林辰从善如流地用了尊称,“select 确实有 Fd_SEtSIZE 的限制,默认一般是1024。poll 在这方面有所改进,但性能上,在文件描述符非常多的时候,两者都需要遍历整个集合,效率是 o(n) 的。epoll 是 Linux 2.6 内核才引入的,采用基于事件的就绪通知方式,效率是 o(1),是目前最好的选择。”
他顿了顿,补充道:“不过我们现在的业务规模,select 或 poll 暂时够用。直接上 epoll 的话,代码可移植性会差一些,毕竟不是所有 Unix-like 系统都支持。”
吴峰眼中闪过一丝亮光,像是找到了知音:“没错!可移植性和性能的权衡。你们bbS现在用的 Apache 模块,就是多进程模型的典型。看来你确实考虑过这个问题。”他扬了扬手中的纸,“我在分析一个私有协议,遇到点麻烦,数据包重组老是出错,要不要一起看看?”
这就开始技术协作了?林辰愣了一下,随即欣然答应:“好啊,我看看能不能帮上忙。”
接下来的一个小时,两人就挤在一台电脑前,对着密密麻麻的十六进制码和协议文档,激烈地讨论起来。林辰凭借前世丰富的网络编程经验,很快指出了吴峰在状态机设计上的一个细微瑕疵。吴峰一点就透,立刻修改代码,重新测试,问题果然迎刃而解。
“厉害!”吴峰难得地露出了一个堪称“灿烂”的笑容,虽然在他苍白的脸上显得有些僵硬,“你这个状态迁移的思路很清晰!比我自己瞎琢磨强多了!”
“峰哥你基础扎实,我就是旁观者清。”林辰谦虚道。
经过这番深入的技术交流,两人之间的距离感瞬间拉近了不少。吴峰甚至主动分享了一些基地内部的技术“秘籍”,比如哪台服务器性能最好但脾气古怪,哪个仓库里还藏着一些“古董级”但可能有用的开发板。
下午四点多,林辰正准备去吃饭,苏晚晴、陈浩和刘博出现在了基地门口。
“辰哥!这就是咱们的新据点啊!”陈浩一进来就大呼小叫,好奇地东张西望,“嚯!这么多服务器!这得值多少钱啊!”
他的大嗓门立刻引来了不少目光。苏晚晴有些不好意思地拉了拉他的袖子。
林辰笑着迎上去:“来了?感觉怎么样?”
“比想象中……更专业。”苏晚晴轻声说,目光扫过那些忙碌的身影和闪烁的机柜,带着一丝向往。
刘博则直接走到一台开着的服务器后面,盯着里面错综复杂的线缆和指示灯,推了推眼镜,喃喃道:“布线可以优化,散热风道有点问题。”
林辰把他们带到自己的工位附近,介绍了基地的基本情况和刚才与周斌、吴峰的接触。
“我靠!辰哥你这就跟基地大神勾搭上了?”陈浩一脸崇拜。
“是技术交流。”林辰纠正他,然后把周斌关于服务器迁移和资源支持的话转述了一遍。
“太好了!”陈浩兴奋地搓手,“以后咱们就可以名正言顺地在这里通宵了!晚晴姐,你看这环境,比图书馆强多了吧?”
苏晚晴点点头,看向林辰:“那我们接下来具体做什么?”
林辰早有规划:“首要任务是把bbS服务器平稳迁移过来。
刘博,你负责跟基地的运维同学对接,搞清楚网络拓扑和权限。
陈浩,你配合刘博,把我们的web前端和静态资源打包部署到新环境。
晚晴,你负责检查迁移后所有页面的显示和功能是否正常,做好测试用例。”
“没问题!”刘博言简意赅。 “包在我身上!”陈浩拍胸脯。 “好的。”苏晚晴拿出随身携带的笔记本,开始记录。
“至于浩子,”林辰看向陈浩,“前端任务完成后,你有个新挑战。” “什么挑战?”陈浩眼睛一亮。
“学习 windows 下的 Socket 编程,用 delphi 或者 Vc++都行,先把‘开放qq’的客户端登录和基础消息收发功能搞出来。”林辰说,“这是块硬骨头,也是核心。”
陈浩一听,非但没有畏难,反而跃跃欲试:“Socket?听着就牛逼!辰哥你放心,我保证啃下来!不就是ApI嘛,查文档呗!”
看着团队成员们迅速进入状态,林辰心中欣慰。他喜欢这种目标明确、共同奋进的感觉。
接下来的几天,团队四人几乎扎根在了基地。
刘博展现出了惊人的系统天赋,很快就和基地那个沉默寡言的运维大神(就是之前拿螺丝刀那个)混熟了,不仅顺利搞定了服务器迁移的所有技术细节,还顺手帮对方优化了一下基地内部的dNS解析效率。迁移过程只在凌晨进行了短短半小时的停机,几乎无人察觉。
陈浩果然说到做到,一头扎进了 Socket 编程的海洋。起初也是各种碰壁,连接失败、数据乱码、阻塞卡死……问题层出不穷。
他常常对着电脑屏幕龇牙咧嘴,嘴里念念有词地“问候”微软的文档写得不够清楚。但每当解决一个难题,他就会兴奋地跳起来,拉着旁边的人分享他的“胜利喜悦”,也不管别人听不听得懂。
林辰适时地给予指点,帮他理清同步、异步、阻塞、非阻塞这些核心概念。
苏晚晴则成了团队的“质量守门员”和“润滑剂”。她细致地测试着迁移后的每一个页面、每一个按钮,记录下哪怕最微小的显示偏差。
她还主动承担起了部分文档整理和沟通协调的工作,用她特有的温柔和条理,化解了团队内部以及与其他基地成员之间可能出现的摩擦。
她甚至细心地给大家准备了润喉糖和眼药水,提醒长时间盯屏幕的伙伴们注意休息。
林辰自己,则在核心协议设计和后台服务开发上投入主要精力。他借鉴了前世 xmpp 等即时通讯协议的思想,设计了一套精简而可扩展的“辰信协议”(chenmsg protocol),涵盖了登录认证、好友管理、状态通知、点对点消息、群组聊天等核心功能。他在 Linux 下用 c 语言一点点实现服务端,着重考虑性能和稳定性。
基地的生活是充实而快节奏的。他们常常一待就是一天,错过了饭点就叫外卖(当时主要还是靠打电话到附近小餐馆预定),或者啃点面包火腿肠对付一下。
晚上十一点基地锁门,他们才背着书包,拖着略显疲惫但精神亢奋的身体,走在寂静的校园里,讨论着当天遇到的技术问题和明天的计划。
在这个过程中,林辰和苏晚晴的关系,也在这种朝夕相处、共同奋斗的氛围中,悄然发生着变化。
一次,林辰为了调试一个诡异的内存泄露问题,在机房熬到了后半夜。当他终于找到问题根源——一个非常隐晦的指针使用错误——长舒一口气,揉着发胀的太阳穴抬起头时,发现整个基地只剩下他和……趴在旁边桌子上睡着了的苏晚晴。
机房灯光已经调暗,只有他屏幕的光映照着她安静的睡颜。长长的睫毛在眼睑下投下柔和的阴影,鼻翼随着呼吸轻轻翕动,几缕发丝散落在光洁的额头上。她怀里还抱着一个笔记本,上面密密麻麻记录着测试用例。
林辰的心瞬间被一种难以言喻的柔软情绪填满。他轻轻起身,拿起自己挂在椅背上的外套,小心翼翼地披在她身上。
动作虽然轻柔,还是惊醒了浅眠的苏晚晴。她迷迷糊糊地睁开眼,看到近在咫尺的林辰,先是愣了一下,随即脸颊微红,有些慌乱地坐直身体:“啊……我睡着了?你问题解决了吗?”
“嗯,解决了。”林辰的声音不自觉地放得很柔,“很晚了,我送你回宿舍吧。”
“好……”苏晚晴低下头,拢了拢身上还带着林辰体温的外套,小声应道。
回宿舍的路上,月光如水,秋夜的凉意沁人心脾。两人并肩走着,一时无言,却并不尴尬。
“以后别等我到这么晚了。”林辰轻声说。 “你自己不也一样?”苏晚晴抬起头,看了他一眼,眼神在月光下亮晶晶的,“再说,我也不是特意等你……就是测试用例没写完。” 她的借口找得并不高明,带着一丝少女的娇憨。
林辰笑了,没有戳穿:“好,那下次我们一起早点写完。” “嗯。”苏晚晴也笑了,轻轻点头。
那一刻,林辰清晰地感觉到,某种温暖而坚定的东西,在他们之间静静流淌,比任何代码和协议都更让他心安。
一周后,“清华bbS”在基地新环境下的运行完全稳定,甚至因为网络优化,访问速度还有所提升。
陈浩也拿出了第一个能勉强登录和收发消息的“开放qq”客户端原型,虽然界面丑得感人,动不动就卡死,但毕竟是个里程碑。
林辰组织了一次团队内部的小型总结会,就在基地的小会议室里。他买了几瓶北冰洋汽水和一堆零食。
“兄弟们,辛苦了!”林辰举起汽水瓶,“第一阶段,站稳脚跟,顺利完成!敬大家!”
“干杯!”四个汽水瓶碰在一起,发出清脆的响声。
“我宣布!”陈浩灌了一大口汽水,豪气干云,“咱们‘启辰科技’驻清华办事处,今天正式挂牌营业了!”
大家都被逗笑了。虽然公司还没影,但这个名字,这个梦想,已经在他们心中生根发芽。