由于最近工作需要,所以写了个Web IM前端核心,现在写的差不多了,拿出来分享一下。由于第一期时间比较紧张,所以使用XHR轮询方式请求服务器,设计思路是“单一时钟 + 函数步长”,请注意我展示的只是核心测试原型而已,但是主要的重要的部分都实现了,代码有点长我就不贴了,自己去测试地址看好了!测试地址:http://www.zhanghong.name/example/webim/测试说明:后边2个 <iframe /> 是输入框,可以按回车发送,或者 shift + 回车是换行(也可以设置为按 shift + 回车 是发送)。可以直接粘贴整个网页进来,脚本会自动提取网页中的纯文本。

解决方案 »

  1.   

    ajax轮询
    感觉还是用socket比较爽一点。延迟低,发送数据量小。
      

  2.   

    二期用XMPP协议做服务器推送,socket 是个古董
      

  3.   

    tcp/ip  http 都离得开socket么...
    作为古董socket表示鸭梨很大...
    技术不在于花哨,在于实践。
    你一个消息发送老大一个xml过来,占用这么多带宽,尤其是网速不好的情况下,你还能干啥...
      

  4.   

    <?xml version="1.0" encoding="utf-8"?>
    <imdata> <setting>
    <param name="key" value="value" />
    </setting> <waiting> <note>
    <param name="member"   value="zhanghong" />
    <param name="nickname" value="zhanghong" />
    </note> <note>
    <param name="member"   value="panyunqi" />
    <param name="nickname" value="panyunqi" />
    </note> <note>
    <param name="member"   value="zengke" />
    <param name="nickname" value="zengke" />
    </note> <note>
    <param name="member"   value="wangzhaodong" />
    <param name="nickname" value="wangzhaodong" />
    </note> </waiting> <talking> <note>
    <param name="member-me"         value="zhanghong"           />
    <param name="member-he"         value="zengke"              />
    <param name="container-message" value="imcontainer-message" />
    <param name="container-sending" value="imcontainer-sending" />
    </note> </talking> <message> <note>
    <param name="member"   value="kk" />
    <param name="nickname" value="kk" />
    <param name="elapse"   value="1320653626345" />
    <param name="type"     value="file" />
    <param name="content"  value="http://fileurl" />
    </note> <note>
    <param name="member"   value="zhanghong" />
    <param name="nickname" value="zhanghong" />
    <param name="elapse"   value="1320653553090" />
    <param name="type"     value="talk" />
    <param name="style"    value="color:#FF9900; font-family:宋体; font-size:20px; font-weight:normal; font-style:normal; text-decoration:none;" />
    <param name="content"  value="今天午饭吃了吗?" />
    </note> <note>
    <param name="member"   value="zhanghong" />
    <param name="nickname" value="zhanghong" />
    <param name="elapse"   value="1320653575562" />
    <param name="type"     value="talk" />
    <param name="style"    value="color:#FF9900; font-family:宋体; font-size:20px; font-weight:normal; font-style:normal; text-decoration:none;" />
    <param name="content"  value="没吃?" />
    </note> <note>
    <param name="member"   value="zhanghong" />
    <param name="nickname" value="zhanghong" />
    <param name="elapse"   value="1320653607450" />
    <param name="type"     value="talk" />
    <param name="style"    value="color:#FF9900; font-family:宋体; font-size:20px; font-weight:normal; font-style:normal; text-decoration:none;" />
    <param name="content"  value="没吃回家吃去吧!" />
    </note> </message></imdata>这样一个xml貌似也木有多大
      

  5.   

    都木有看我楼顶怎么说的么,又不是我想用XHR轮询,二期会用XMPP协议做服务器推送,socket本来就古董了,那都是 net 框架玩剩下的。 
      

  6.   

    另外如果楼下有人说 NET 太简单的话,请封装个NET控件出来看看,vs 编辑器的强大就在于,可以拖拽,这样大大的提高了开发效率,但是不代表自己直接写代码就出不来效果,很多 net 牛人自己写 C#等代码不比写java的差
      

  7.   

    这里我就像问下?请问xml比socket多了几个字节?无聊不物理……
      

  8.   

    不敢苟同!
    这两种技术都有它的局限性,合适的才是最好.
    另外页面上通过Flash来和server建立socket连接也是很不错的.
      

  9.   

    只能说明楼主缺少socket经验。
    相反,楼主也许就会说XMPP只不过是个应用而已。不同的人在不同的环境做出最利于当前的决策是正常的,利于当前不一定就是利于全局。
      

  10.   

    建议楼主去看一下http协议。
    了解一下http实现机制。
    如果你一定觉得我说的毫无道理,很无聊,我表示赞同。
      

  11.   

    刚好 前些时候也做了一个 服务器端用openfire + jetty ,客户端获取消息发起一个 xhr,在没有获得新消息之前这个请求一直被服务器挂起。有消息后才返回。这样减少无消息是的无效请求次数。。 
      

  12.   


    草,你到是应该看看我的楼顶怎么说的,看都没看清楚就进来扯淡,socket就是古董怎么地?不爽出去
      

  13.   

    时间要是不紧张别说Socket了,你叫我用毛线发送我都给你搞出来,就扯淡行,再说我是搞前端的,又不是做服务端的,服务器端不推送,Socket他爹来了也不好使
      

  14.   


    楼主莫生气,讨论技术有争论这很正常的啊.
    也许你是做前端的缘故,所以对后台server不熟悉也是情有可原的.
    用js可以写个娱乐游戏,当然用后端的window窗体也是可以写的.
    你所说的刷爆,其实这就是后台消息处理server要考虑的事情了,但其前端页面的js,as质量也要好,不然就算后台消息处理服务器在强大也不行.
      

  15.   

    我展示的是前端JavaScript脚本技术!比如如何按回车发送,如何过滤掉粘贴进来的非文本内容,不是如何与服务器通讯,而且我只负责写前端,叫我整个服务器推送,人家搞后台的不这么写我写个毛,一群人没看清楚标题么?这里他妈的是 JavaScript 专区!不是ASP,PHP,JAVA,C#专区!
      

  16.   

    楼主v5,做技术要先做人.大家讨论请不要说脏话.
    我觉得你所说的前端可能就是特指用javascript,其实还有其他很多的技术的,比如flash和flex,以及silverlight同样是可以实现这种功能的.
    楼主你v5了!
      

  17.   

    \孙\子,哥对你说socket是个古董表示震惊,你可以离开IT行业了!
      

  18.   

    莫急莫噪 看看别人的效果http://www.lesktop.com/Default.aspx
      

  19.   


    用你管我么?这里是js专区,c++进来扯什么蛋,滚
      

  20.   

    这人IQ可能不错,但EQ实在有限