mysql dump 乱码问题

将utf8编码的数据库使用mysqldump.exe来导出,得到的却是乱码

明明设置了--default-character-set=utf8 任然如此,网上搜了些文章,例如 http://blog.derjohng.com/2006/01/18/backup-mysql-utf8-data/

说的是改为--default-character-set=latin1,我试了一下,还是乱码。莫名其妙,想了想试试如下的命令

"D:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump.exe" --user=root --password=root --default-character-set=gbk --skip-opt --add-drop-table --set-charset --dump-date --result-file=data.sql test

这样导出的结果编码才是正确的。(注意不要丢掉--skip-opt 选项)

问题是解决了,我还是莫名其妙。

明明设置的是utf8,数据库my.ini里面默认也是utf8,哪里搞出个gbk来了?

看官方文档,有这么一句话:

http://dev.mysql.com/doc/refman/5.1/en/charset-configuration.html

when character_set_system differs from character_set_server or character_set_client, and you input characters manually (as database object identifiers, column values, or both), these may be displayed incorrectly in output from the client or the output itself may be formatted incorrectly. In such cases, starting the mysql client with --default-character-set=system_character_set—that is, setting the client character set to match the system character set—should fix the problem.

似乎是要匹配文件系统字符集,也就是你的操作系统字符集。

Continue reading mysql dump 乱码问题

it-e-07 embedded system

An "embedded system" is a special-purpose computer system, which is completely encapsulated by the device it controls. An embedded system has specific requirements and performs pre-defined tasks, unlike a general-purpose personal computer.
Characteristics

Two major areas of differences are cost and power consumption. Since many embedded systems are produced in the tens of thousands to millions of units range,reducing cost is a major concern. Embedded systems often use a (relatively) slow processor and small memory size to minimize costs. The slowness is not just clock's speed. The wholearchitecture of the computer is often intentionally simplified to lower costs. For example,embedded systems often use peripheralscontrolled by synchronous serial interfaces, which are ten to hundreds of times slower than comparable peripherals used in PCs. Programs on anembedded system often must run with real-time constraints with limited hardware resources:often there is no disk drive, operating system, keyboard or screen. A flash drive may replace rotating media, and a small keypad and LCD screen may be used instead of a PC's keyboard and screen. Firmwareis the name for software that is embedded in hardware devices, e.g. in one or more ROM Flash memory IC chips. Embedded systems are routinely expected to maintain 100% reliability while running continuously for long periods of time, sometimes measured in years.
Firmware is usually developed and tested to much stricter requirements than is general purposesoftware (which can usually be easily restarted if a problem occurs). In addition, because the embedded system may be outside the reach of humans (down an oil well borehole, launched intoouter space, etc.), embedded firmware must usually be able to self-restart even if some sort of catastrophic data corruption has taken place. This last feature often requires external hardware assistance such as a watchdog timer that can automatically restart the system in the event of a software failure.

Platform

There are many different CPU architectures used in embedded designs. This in contrast to the desktop computer market, which as of this writing (2003) is limited to just a few competing architectures, mainly the Intel/AMD x86, and the Apple/Motorola/IBM PowerPC, used in the Apple Macintosh. One common configuration for embedded systems is the system on a chip, an application-specific integrated circuit, for which the CPU was purchased as intellectual property to add to the IC's design.

Continue reading it-e-07 embedded system

读书笔记:Effective Java, Second Edition-5章

Item 23: Don’t use raw types in new code

带参数泛型提供了安全类型检查,自动类型转换的便利,提倡使用。

raw type指没有指明类型的如List

List<String> 是 List的子类 但不是 List<Object>的子类,ArrayList<Object>才是List<Object>的子类。

List.class,String[].class, and int.class 合法,但 List<String>.class and List<?>.class不合法。

instance操作符只能使用Raw Type  (o instanceof Set) √ , (o instanceof Set<?>) ×

Set<Object> is a parameterized type representing a set that can contain objects of  any type,

Set<?> is a wildcard type representing a set that can contain only  objects of some unknown type, 无法使用

Set is a raw type, which opts out of the generic type system.

The first two are safe and the last is not.

Term
Example

Parameterized type
List<String>

Actual type parameter
String

Generic type
List<E>

Formal type parameter
E

Unbounded wildcard type
List<?>

Raw type
List

Bounded type parameter
<E extends Number>

Recursive type bound
<T extends Comparable<T>>

Bounded wildcard type
List<? extends Number>

Generic method
static <E> List<E> asList(E[] a)

Type token
String.class


Item 24: Eliminate unchecked warnings

消灭warning……

Item 25: Prefer lists to arrays

数组是协变的,if Sub is a subtype of Super, then the array type Sub[] is a subtype of Super[].

如此相反的是:Generics, by contrast, are invariant: for any two distinct types Type1 and Type2, List<Type1> is neither a subtype nor a supertype of List<Type2>

泛型的类型更强

不能建立泛型数组,因为需要保证泛型的类型安全【略】

总体来说就是,数组和泛型结合的不是很好,如果你碰到这种情况,使用列表代替数组。

Item 26: Favor generic types

泛型数组的解决方案(泛型中不得不用到数组的情况):

1:字段类型是T[],使用Object数组转换

private E[] elements;

// The elements array will contain only E instances from push(E).
// This is sufficient to ensure type safety, but the runtime
// type of the array won't be E[]; it will always be Object[]!
@SuppressWarnings("unchecked")
public Stack() {
elements = (E[]) new Object[DEFAULT_INITIAL_CAPACITY];
}

2:字段类型是Object数组,每次取数组元素时转换

// Appropriate suppression of unchecked warning
public E pop() {
if (size==0)
throw new EmptyStackException();
// push requires elements to be of type E, so cast is correct
@SuppressWarnings("unchecked")

E result = (E) elements[--size];
elements[size] = null; // Eliminate obsolete reference
return result;
}

Item 27: Favor generic methods

Item 28: Use bounded wildcards to increase API flexibility

PECS 原则:if a parameterized type represents a T producer, use <? extendsT>;if it represents a T consumer, use <? superT>.

// Wildcard type for parameter that serves as an E consumer
public void popAll(Collection<? super E> dst) {
while (!isEmpty())
dst.add(pop());
}

// Wildcard type for parameter that serves as an E producer
public void pushAll(Iterable<? extends E> src) {
for (E e : src)
push(e);
}

Item 29: Consider typesafe heterogeneous containers

容器里面多种类型的情况:

// Typesafe heterogeneous container pattern - implementation
public class Favorites {
private Map<Class<?>, Object> favorites = new HashMap<Class<?>, Object>(); //以Class<?>作为键达到多种类型的目的。注意Class<?>这个特殊的形式参照Item23.
public <T> void putFavorite(Class<T> type, T instance) {
if (type == null)
throw new NullPointerException("Type is null");
favorites.put(type, instance);
}
public <T> T getFavorite(Class<T> type) {
return type.cast(favorites.get(type));//将Object安全的转为了绑定类型

Continue reading 读书笔记:Effective Java, Second Edition-5章

【转】面试官心得

以下一些问题及其答案,仅代表我个人观点,仅供参考,但是如果你遇到问这些问题的很可能就是我在面你。

      1.自我介绍

      其实我想要的不是姓名,年龄,工作经历这些,拜托这些简历上都有我不是文盲,我是想知道你的优点,特长这些信息,你可以很自豪的告诉我你擅长数据库,解决过****等无数难题就可以了。

      2.我们公司会有自己的一套框架,你是否很快速的接受它,如果不能适应改怎么办

      我想知道的是你的学习能力和适应能力,并且如果你对框架有你独到的见解,我会加分的

      3.能不能够加班,或者出差,如果加班没有工资的话是否能接受

      这个我想要知道的是,一是否能吃苦耐劳,与公司同进退,二是看你的应变能力,我不想听简单的能与不能,其实是想看你的应变,你能否处理好这件事,三如果你什么情况都能接受,我也不会要你的,记住什么都能接受是对自己水平的不自信。

       4.是否有职业规划

       如果没有这个的话,我会认为你不想在在这个行业干出一些成绩,只想混日子。

       5.继续上面的问题,如果你选择技术方面发展,我会问,怎么才算是合格的程序员,什么样的代码是好代码,如果选择管理方面发展,我会问,你过去开发程序的过程是怎么样的。

       这个纯粹是了解下你目前的能力,我觉得这个已经大概可以展现你部分的能力了。

       剩下还有5到技术问题,这个就不方便透露了,但是我会分为三个级别,初级,你答上来我会认为你合格,中级我会为你加分,高级我会为你加薪就是这么简单。

       希望会对大家有所帮助。

Continue reading 【转】面试官心得

openfire 插件开发

此blog可行http://www.blogjava.net/jyleon/articles/255623.html

补充几点:

下载的openfire包目录/openfire/documentation/plugin-dev-guide.html中介绍了怎么开发插件.

要将源代码放在openfire的源代码目录中用其build.xml来编译。

在3.6.3中,最终打成的包是.pack文件,似乎插件里面getResourseAsSream方法不能用。

在3.6.4中,最终打成的包是.jar( zip格式),penfire启动后会解压缩生成目录,可看到插件被作为一个jar包放在lib目录下。所以只要第一次使用build命令打包,在以后直接将工程打成jar包放到lib目录下即可:测试是可行的。

但是注意,不能将发布的插件jar包删除,删除了的话,对应的文件夹也会被openfire自动删除。

两个可能有用的方法:

JiveGlobals.getHomeDirectory()

Log.getLogDirectory()

 

再回过来详细介绍一下,之前做过的又忘了,好些东西都重来了一遍。

现在已目前最新的包openfire-3.7.1为例:

将源码下下来66M多,不知为什么一下增加这么多了。

期目录结构如下图:

Snap1

将我们的插件以文档(documentation\docs\plugin-dev-guide.html#Using the Openfire Build Script)规定的格式存放,

Plugin Structure

myplugin/
 |- plugin.xml      <- Plugin definition file
 |- readme.html     <- Optional readme file for plugin
 |- changelog.html  <- Optional changelog file for plugin
 |- logo_small.gif  <- Optional small (16x16) icon associated with the plugin (can also be a .png file)
 |- logo_large.gif  <- Optional large (32x32) icon associated with the plugin (can also be a .png file)
 |- classes/        <- Resources your plugin needs (i.e., a properties file)
 |- lib/            <- Libraries your plugin needs
 |- src/
     |- database    <- Optional database scripts for your plugin
     |- java        <- Java source code for your plugin
     |   |- com
     |       |- mycompany
     |           |- *.java
     |- web
         |- *.jsp      <- JSPs your plugin uses for the admin console
         |- images/    <- Any images your JSP pages need (optional)
         |- WEB-INF
             |- web.xml    <- Optional file where custom servlets can be registered

将myplugin整个文件夹放在src\plugins中。

然后在其build文件夹中可找到build.xml,使用如下命令可单独编译单个plugin,但应在编译单个plugin之前至少运行一次plugins任务,负责无法编译单个plugin,报错为lib文件夹找不到,webapp目录找不到 :

ant plugin -Dplugin=myplugin

运行命令即可在work\plugins中找到编译好的plugin。

如果你在eclipse中,可右键点击build.xml, run as/Ant Build …/ 注意是三个点的那个才有更多选项。

Snap3

Snap4

这样配置和上面的命令行方式效果一样。

 

openfire提供离线消息发送,但是不提供历史消息存储。因此需要写插件来保存历史记录。

Continue reading openfire 插件开发

[转csdn文章]学习HTML5不可错过的12家国外网站(组图)

学习HTML5不可错过的12家国外网站(组图)

2011-04-21 23:43 | 25977次阅读 | 来源:CSDN编译 【已有60条评论】发表评论

关键词:HTML5 | 作者:子曰 | 收藏这篇资讯

[CSDN编译]HTML5是近十年来Web开发标准最巨大的飞跃。和以前的版本不同,HTML5并非仅仅用来表示Web内容,它的新使命是将 Web带入一个成熟的应用平台,在HTML5平台上,视频、音频、图象、动画以及同电脑的交互都被标准化。对于广大开发人员和设计者,究竟该如何入手 HTML5及获取相关的国外最新资源。以下是广大HTML5技术爱好者学习和参考相关技术不可错过的12家外网,它们或是采用HTML5技术开发出的案例,或是HTML5相关的学习资源,供国内的开发人员参阅。

(1)HTML5 Labs

HTML5实验室,这里有HTML5标准、范型和应用规范的最新内容。

(2)HTML5 – Wikipedia

维基百科对HTML5的介绍包括了它的历史、特性、与HTML4.01和XHTML 1.X的异同、HTML5的LOGO、参考资料、深度阅读及相关的链接等等。

(3)Apple – HTML5

最新的苹果移动设备和每一款Mac,包括最新的Safari浏览器,都支持最新的HTML5、CSS3和JavaScript。这里有苹果关于HTML5的最新成果和案例。

(4)Youtube HTML5 Beta(需翻墙)

YouTube上推出了HTML5视频试用,用户可以选择是否参加。如果用户使用的是受支持的浏览器,则可以选择使用HTML5播放器而不是Flash播放器播放大多数视频。

(5)Dive into HTML5 by Mark Pilgrim

这是一本Mark Pilgrim写的介绍HTML5的畅销书籍,内容包括关于HTML5你不得不知的5件事、HTML5的历史、HTML5包含的元素、视频演示以及更多的使用技巧等等。

(6)HTML 5 Cheat Sheet (PDF) – Smashing Magazine(关于HTML5资料的PDF文档精华 )

(7)HTML5 Rocks(需翻墙)

HTML5 Rocks的内容包括了HTML5的演示、视频、如何使用HTML5的API、基础进阶教程等等。

(8)World’s Biggest PacMan

用HTML5开发出的在全球畅销的经典游戏。

(9)HTML5 Gallery

这里汇集了用HTML5开发出的各种应用和演示。

(10)HTML5 Demos

全球开发者用HTML5开发出的示范案例和演示。

(11)W3Schools HTML5

在W3Schools HTML5,“私人教师”会向你介绍HTML5最新的特性以及如何应用它们。此外,(12)Gury (需翻墙)也是HTML5爱好者不可错过的。

Continue reading [转csdn文章]学习HTML5不可错过的12家国外网站(组图)

it-e-08 Real-Time Operating System

A "Real-Time Operating System" or "RTOS" is an operating system that has been
developed for real-time applications. Typically used for embedded applications. Note that this type of operating system does not necessarily have high throughput — the specialized scheduling algorithm and a high clock-interrupt rate can both interfere with throughput. An early example of a large-scale real-time operating system was the so-called "control program" developed by American Airlines and IBM for the Sabre Airline Reservations System. Debate exists about what actually constitutes real-time.
Scheduling

In typical designs, a task has three states: running, ready and blocked. Most tasks are blocked for most of the time. Only one task per CPU is running. The ready list is usually short, two or three tasks at most. The real trick is designing the scheduler. Usually the data structure of the ready list in the scheduler is designed so that search, insertion and deletion require locking interrupts only for small periods of time, when looking at precisely defined parts of the list. This means that other tasks can operate on the list asynchronously, while it is being searched. A typical successful schedule is a bidirectional linked list of ready tasks, sorted in order by priority. Although not fast to search, the time taken is deterministic. Most ready lists are only two or three entries long, so a sequential search is usually the fastest, because it requires little set-up time. The critical response time, sometimes called the "flyback time" is the time it takes to queue a new ready task, and restore the state of the highest priority task. In a well-designed RTOS, readying a new task will take 3-20 instructions per ready queue entry, and restoration of the highest-priority ready task will take 5-30 instructions. On a 20MHz 68,000 processor, task switch times run about 20 microseconds with two tasks ready. 100 MHz ARM CPUs switch in a few microseconds.

Continue reading it-e-08 Real-Time Operating System

【转】webqq实现

谁说腾讯不创新

    2010-12-09 11:37    总点击量:160     总评论数:2

        谁说腾讯不创新?WEB2.QQ就是个挺强悍的反击。咋一看到时我不禁摸摸头,难道这就是传说中的QQ OS?

【总体体验】

电脑上国内普及的1M网速,首次加载2s,登录加载3s,大部分用户的体验应该都优于这个。3G体验也近似于这种水准。

算上各种因素(带宽被占用等),就算以20K/S的网速来看,首次加载的时间10s,而登录加载15秒,这是GPRS能达到的顶级体验。

或许,从门户站点的体验上来看,这并不是特别难以实现的事情;然而这是个应用,对比起许多应用程序的几秒乃至几十秒的启动速度而言,这种体验已经非常优秀。

【架构鸟瞰】跨平台:

先看HTML标签,它有着如下class:

class= “javascriptEnabled win win6_1 firefox firefox3_6 gecko gecko20100914_0 flash flash10_0″

可以看到,它把环境都记录在了这里面,包括操作系统、浏览器、渲染引擎、FLASH版本等等。

我们大可以猜想,web2.qq是有对各个浏览器做相关HACK的。

但是,可以看到web2.qq里基本没用HTML5,UI用的是CSS绝对定位的九宫格负外边距圆角,相当不语义化的解决方案……更甚者,其中有些应用还是只有IE下才能使用……从这点看来,开发团队显然认为IE才是国内最大的用户群使用的浏览器。

JavaScript:

可以从request上看到,WEBQQ2用的JS基础库是JET(http://code.google.com/p/j-et/)。这玩意儿挺不给力呀,文档少得可怜,但从那点可怜的文档上看来,它其实是个黏合剂:把各种JS库给无冲突地黏合起来,以达到多框架并用的开发

这个框架主要分为三个层:

最底层:JS扩展功能与代码组织功能,用于增强JS对多框架开发的黏合能力。 中间层:跨浏览器扩展模块,及其它可选模块比如选择器等。似乎,选择器、AJAX、JSON、基础UI及交互等功能是放在这个层面的。 应用层:UI组件、实时动画、游戏引擎等。大块头就放这里,而这些估计都不是初次加载的东西。

而未经GZIP压缩的jet.all.js大小为80K,只比jQuery略大一点点,那么我们大可以假设:

web2.qq用的是jQuery,加上一些如JSON、基础交互的实现。 web2.qq用的是jQuery的一个子集,加上基础UI组件、所使用到的交互等功能模块。

个人看来,第一种情况不太可能。因为里面包含了大量的UI交互,如弹窗、自动贴齐、拖曳、九宫格圆角、PNG半透明等等。我不信WEBQQ会把这些轮子在每个APP上都重造。所以,使用jet的理由就很明显了:webqq团队需要一个胶水,把各种选用的框架给粘在一起,而且开发成本与学习成本都要足够低。所以,就选用了jet,和一堆流行的框架。

而就个人看来,它核心库里应该包含的实现有:

jet核心 sizzle选择器 xhr/ajax 基础动画、拖曳、贴齐、弹窗、窗口大小调整等交互。嗯,好像也没看出WEB2.QQ里有多少动画。 尺寸、swf、css、数据等等一堆杂七杂八的小东西

曾经有考虑过使用jQuery与jQueryUI里的交互部分来作为应用的支撑库,但jQuery+uicore+interactive加起来将有150K的大小,显然web2.qq用了个更轻量的解决方案。

【加载问题】

所有的大型应用都得考虑模块加载问题,如何保持模块间的相互独立及良好通信等等。

在页面内容的加载问题上,其实之前都已经有了比较多的解决方案:

预加载:某些大块头的东西应该在用户驻留在页面上的空隙进行加载。 懒加载:该加载时才加载,而优先加载用户可能操作的部分。 CACHE:其实这个在网页上比较难实现,但也不是没有办法:使用AIR/HTML5或是内嵌页面的瘦客户端。严格来说,除了HTML5之外的解决方案,都不能算在标准的范畴。

而WEBQQ2最集中体现了前两者的使用。让我们从 HTTP Request 的角度分析下 web2.qq.com 的加载:

HTML的流量大小基本可以忽略,主要重量在JS上面。从这点上看,跨浏览器的脚本已经成为WEB开发的难点与重点。 首次载入页面的JS预加载:jet.all.js库80K,webqq.main.js库100K。而且,只有JET放在了head里加载,而webqq.main.js是放在div#desktop后面加载的,所以,时间线上到把页面展示出来并可以点击“登录键”,只有100K左右的HTML/CSS/JS,剩下的都是应用栏及任务栏等的加载,然后就是那一堆图片的加载与默认应用的加载。 永远不会进行自动登录。一是保证了网页沙箱上的安全性,二也不会让浏览器一次承担500K以上的加载负担,保证了体验的平滑过渡。相信用户也都能接受没有自动登录功能的WEBQQ。 点击登录后再次加载不超过300K的JS。这里俺有点困惑,因为真的需要300K来实现主要的QQ功能么?毕竟很多的应用其实都是基于网页实现,并不要求直接脚本实现。估计,这里还是有优化空间的。 所有控件使用独立的JS。模块化的体现。中间或许难免会有重造轮子的事情,但却是大型团队开发所难以避免的。 腾讯一惯强大的服务器支撑能力。这点其实非常重要,否则加上每次加载的延迟与缓慢的速度,甚至偶尔还来个404什么的,体验绝对不会是现在这个样子。 CSS文件上的加载基本与JS相对应,也就是一个JS一个CSS。同理,模块化的开发。会造成冗余但却足够实用和敏捷。 貌似没启用GZIP?有可能是会对服务器端性能造成影响?粗略估计,使用了GZIP后首次加载的180K的JS会变成50K左右,不过,有没这个必要呢? 【展望】

最近在翻译《HTML5 for Web Designer》,也的确像上面写的那样,HTML5/CSS3的工作只是把原本很流行的、却需要HACK或是需要脚本的东西—迁移到了较为定义式的语言上罢了。

所以,腾讯发力了,腾讯证明了,一站式的体验也能在WEB上实现,而且用的不是新标准的东西,而仍然是WEB2.0的东西—在IE下都能正常地使用,虽然不那么流畅。

但是随着腾讯的WEB2.QQ及社区开放平台等的相继出现,有个依然没太大改变的地方是,接口依旧相当封闭。这点依然让我比较不满呀。

就像是,腾讯走的是比较像APPSTORE的道路:开放了这个平台给你,但你只能用这个平台,而不能用其它平台。

但的确的,腾讯在用户体验与IT应用上,都是在国内处于领航地位的。虽然一家独大的确比较让人苦闷。也期待国内其它IT企业在腾讯的压力下能迎头赶上,把国内的web与标准化真正推动起来。

也继续期待HTML5时代的真正来临,尤其是离线与同步应用上上。

JET代码范例及API  SVN地址 http://j-et.googlecode.com/svn/truck/

关键字(Tags): webQQ JET

上一篇U盘终结者网丫场掀云计算应用的革命热潮
下一篇中科院研究生院利用ipv6代理实现免流量费上网方法

#2发表时间:2010-12-9 16:38:05 引用 回复

Web QQ算是web应用的尝试,此文也仅仅写了一些界面的东西,而且WebQQ还有一个Sliverlight版本

Web QQ的核心应该是消息服务这块,不知怎么实现的。下面贴一个网上的分析:

Web QQ的原理大概如下:
客户端的JavaScript建立连接后,发起一个长连接。如果服务器端没有收到更新或消息,这个HTTP连接就一直不会返回任何数据,直到超时(一般不会超过60秒),超时会发回一个数据,指示客户端再次发起长连接;如果服务器端有数据,那么服务器端也会发送数据,并指示立刻断开这个连接,客户端收到数据,对应更新浏览器页面,还是会再次发起长连接。如此长连接不断,直到退出。简单说,客户端JavaScript就是一个循环创建连接查询的过程,当然还需要加入错误异常(譬如网络异常)的处理。
而服务器端的Cometd实现,我猜是使用epoll或者又叫NIO的技术,原理基本上是收到HTTP连接,不再是单独创建一个线程来处理,而是直接把连接放归epoll或NIO的框架接管,只有需要读数据或者需要写数据时,再通过epoll或 NIO的API进行通知。epoll或NIO可以看作一个单独线程,而这个线程里面所有数据处理基本都是跟网络有关,不会堵塞,所以可以同时接管1万到几十万的连接数据读写(最近通过dbanotes看到50万连接的极端案例)。所以这种框架下的Cometd服务器端,实际线程数小,开销很小,只要网卡够快,内存够大,CPU够快,程序够稳定,就可以轻松支撑万计的长连接。
如果按照一台服务器支持1万的长连接来看,只需要100台服务器就可以支持100万的web QQ在线了。而服务器的均衡可以在JavaScript端稍作处理,或者外加一台服务器做均衡即可实现。而以腾讯在服务器均衡、服务器群部署方面的经验来说,这些早是小儿科了。
我猜测web QQ要么有自己很成熟的Cometd服务器框架,要么就自己专门针对web QQ开发他们自己的Cometd服务器。直接使用Apache + PHP或者已有的服务器,估计很难达到高性能高稳定性。而重新开发一款Cometd服务器,对于有经验的开发人员和设计人员,花个把月时间,应该可以完成。
上述这些理解,主要是基于我自己开发web MSN/Gtalk/Facebook Chat/Yahoo Messenger网页聊天服务( http:/webuzz.im/ )的理解。相比较web QQ而言,我开发的网页聊天还需要从服务器端再连接其他服务器(譬如MSN/Gtalk的官方服务器),服务器端还需做很多其他方面优化。我使用的 Cometd服务器是自己定制开发的,使用的通信协议则是Java2Script的Simple RPC/Pipe( http:/j2s.sourceforge.net/ ),不是JSON相关的协议。以前看到web QQ出来,我也过去瞅一下他们具体如何保持连接,基本原理都一样。当然我相信他们的服务器端是绝对的强。

Continue reading 【转】webqq实现

Pagination


Total views.

© 2013 - 2020. All rights reserved.

Powered by Hydejack v6.6.1