我想使用长期持有的HTTP请求(Comet),ajax和websockets(取决于所使用的浏览器)来编写HTTP WebChat.用户数据库在mysql中.聊天是用PHP编写的,除了聊天流本身,也可以用javascript(node.js)编写:
我不想为每个用户启动一个php进程,因为没有好方法在这些php子进程之间发送聊天消息.所以我想在PHP或node.js中编写自己的套接字服务器应该能够处理超过1000个连接(聊天用户).作为一个纯粹的Web开发人员(php)我不太熟悉套接字,因为我通常让Web服务器关心连接.聊天消息不会保存在磁盘上或mysql中,而是保存在RAM中作为数组或对象以获得最佳速度.
据我所知,在单个php进程(套接字服务器)中无法同时处理多个连接,但是你可以接受大量的套接字连接并在循环中连续处理它们(读写;传入message - >写入所有套接字连接).问题是最大可能会有〜1000个用户的滞后,而mysql操作可能会减慢整个事情的速度,从而影响所有用户.
我的问题是:node.js可以处理性能更好的套接字服务器吗?Node.js是基于事件的,但我不确定它是否可以同时处理多个事件(不需要多线程吗?)或者是否只有一个事件队列.使用事件队列就像php:用户之后处理用户.
我还可以为每个聊天室(更少的用户)生成一个php进程,但是afaik还有单线程的IRC服务器,它们也能够处理数千个用户.(用c ++或其他语言编写)所以也许在php中也可以.
我更喜欢PHP而不是Node.js因为那时项目将只是php而不是编程语言的混合.但是,如果Node可以同时处理连接,我可能会选择它.
在开始编写我的应用程序之前,我需要知道当单个node.js实例(express和(socket.io或nowjs))不再足够时该怎么做.
你现在可能告诉我,我不应该关心规模直到时间,但我不想开发应用程序并遇到麻烦,因为你不能轻易地在多个实例中扩展socket.io或nowjs.
我最近读到socket.io现在支持使用Redis进行扩展的方法(我也没有经验).Nowjs是基于socket.io构建的 - 它的工作方式是否相同?在nowjs.org上,您可以读到"NowJS的分布式版本"正在开发中,并且需要花钱.
我正在为Node.js(wxWidgets)编写一个GUI插件,我想在自己的线程中运行GUI循环,因为我不认为将它与Node的主线程和事件循环合并是个好主意.
但是我不确定如何创建新线程.我把它运行了uv_queue_work().但它不会为GUI创建独占线程,而是使用Node的线程池.这可能是一个坏主意,因为工作人员将在整个运行时期间停留.(不确定这个)
我也可以使用wxWidgets' wxThread,也可以.我uv_thread_create在libuv git master中找到了一个新功能.不知道如何使用它,因为没有描述,除了它还没有在Node.js稳定版本中可用.
我的问题:如果有的话,创建多线程Node.js插件的"标准"方法是什么?我查看了其他项目,但只能使用libuv找到短时间运行的工作线程.
我读过Skype和ICQ等桌面应用程序中的XSS漏洞.我想知道为什么他们选择在这种应用程序中使用html,也可以在没有任何HTML的情况下编写.有一个简单的原因吗?有人知道Skype是否仅在"Skype Home"等页面上使用html,还是用html编写的整个GUI?
我问,因为我正在编写一个在浏览器中运行的Web应用程序,一旦完成,将被移植到移动和桌面平台.你可以将它与即时通讯工具进行比较,但实际上它是不同的.
我想过使用PhoneGap简单地将项目"复制"到移动平台并通过PhoneGap API使用系统功能.但我认为它可能很慢和/或不好看.它也不会看起来是原生的,那么问题是在所有平台上是否也使用我们自己的html GUI(因此它看起来无处不在)或调整每个平台的设计概念(使用本机语言中的本机控件或例如Titanium(不幸的是太贵了)).
但我从没想过在桌面应用程序中使用HTML.你怎么嵌入那个呢?我正在使用C#.使用WebBrowser表单元素还是使用某种Web浏览器渲染引擎?
Safari有一些奇怪的行为box-shadow.
input[type="text"]{
-webkit-box-shadow: 0 0 8px #000000;
box-shadow: 0 0 8px #000000;
}
input[type="text"]:focus{
outline: none;
-webkit-box-shadow: 0 0 8px #ffffff;
box-shadow: 0 0 8px #ffffff;
}
Run Code Online (Sandbox Code Playgroud)
将box-shadow被显示,但只要元素获得焦点的阴影完全消失.如果您未设置任何内容,则会发生相同的效果:焦点.
它适用于Desktop-Safari.我正在使用iOS 5测试版(iPad),我无法在稳定版本或其他设备上测试它.
有人有解决方案吗?
我目前正在为有限(本地)目标开发一个社区(如轻量级"社交网络").这是SEO无关紧要的第一个项目,我可以愉快地排除no-js用户.这就是为什么我正在考虑启动项目并编写我的第一个完全使用Javascript和我的第一个Node应用程序构建的网站,这是出于教育原因.
细节到目前为止:
浏览器:jQuery,也许是JavaScriptMVC(有一些我不喜欢JavaScriptMVC的东西(比如路由),也许我写自己的小MVC或者你知道一个更合适的框架吗?)
服务器:Node.JS,Express框架,(可能是socket.io或nowjs以获取更多功能)
到目前为止我有几个问题.我知道问一个问题更好但是有更多或更少的连接:
Express看起来很不错但我错过了MVC.我找不到任何实现mvc的项目,并且是基于Express构建的.这有什么理由吗?在Express中路由很好但是我需要一种方法来跨多个文件传播代码(控制器将是我猜的最佳方式,应用程序不会很小,我需要它可维护)
该应用程序或多或少完全基于AJAX(json)请求.无论如何,Express是否适用于此类应用程序?我认为编写这个项目的最好方法是公开一个json REST api,然后可以通过AJAX和移动设备应用程序(我也将编写)通过Web应用程序查询.在我看来,Express'路由系统非常适合REST.但随意推荐其他框架.
我们希望为在线服务编写客户端,该服务应该在尽可能多的平台上提供.这个问题是关于我们应该使用什么编程语言和框架来创建这个客户端.这些平台是必需的:Linux,Mac,Windows,iOS(iPhone,iPod,iPad)和Android.越多越好.
对于移动平台,有Titanium Mobile.我还没有尝试过这个东西,该网站说你可以使用Javascript等网络技能为iOS和Android开发.我还不知道您是否可以使用SAME代码部署这两个平台.这会很棒!
还有Titanium Desktop但我不喜欢完整源代码与最终应用程序共享的想法.Titanium也为移动设备做到这一点,但修改通过App Store加载的应用程序并不容易.
那么,还有什么方法可以创建一个至少在三个主要桌面平台上运行的应用程序?我认为使用mono的c#是可行的方法,但我只是意识到你需要在MonoMac上使用mono,以便在Mac App Store上发布它并使用像Growl这样的东西.由于MonoMac自然只适用于Mac,因此再次无法在所有平台上部署单声道应用程序而无需至少重写Mac.如果应用程序在所有平台上看起来都是"原生的",那就太好了.Gtk#在Mac上看起来不太好看.它在Windows上"没问题",在Linux上很棒.
我知道我们可以使用Objective-C for iOS和Mac,Java for Android,C#.net for Windows和C#.mono for Linux但主要的一点是我们不想用很多不同的语言编写相同的应用程序.这将使开发和维护变得非常困难.
我们更喜欢具有C风格语法的语言,这对我们PHP Web开发人员来说更容易学习.顺便说一句:我们不喜欢Air,我不确定Java,因为我从来没有使用它,但它看起来也不像"原生",感觉有点慢.
编辑:
请注意:如果至少剩余的代码是相同的,为每个平台创建自己的表单不会有问题.是否可以在同一个C#应用程序中使用MonoMac,Gtk#和Win Forums?而且我更喜欢C#而不是C++,因为我没有C++的技能,所以我首先需要检查用Qt写的有多难.
另一个注意事项:我们不打算花太多钱,因为我们需要支付苹果开发者计划,我们想要使用免费或廉价的技术.优先的开源.
我正在用C#编写一个即时消息服务器用于学习目的.我的问题是我是否应该使用同步或异步套接字来处理IM客户端.目标是尽可能多地处理客户.
我不太确定但据我所知,对于异步套接字,数据包没有按顺序到达,这意味着当您发送2条聊天消息并且存在延迟/延迟时,第二条消息可能在第一条消息之前到达.这是对的,如果是的话,有没有办法解决这个问题?
关于同步套接字:同步套接字是否适用于许多客户端?如果有新数据包,是否必须检查循环中的每个套接字/连接?如果是这样,这不是很慢吗?
最后一个问题:假设我想实现一种通过协议(非标准二进制协议btw)发送文件(例如图像)的方法,我还可以在上传时发送消息吗?
我正在寻找一种在node.js中实现双向RPC的方法(意味着客户端和服务器都提供远程可调用的过程,最好像json-rpc).它应该可以在socket.io和客户端的TCP/IP套接字之上使用.我准备使用nowjs用于websockets并为"普通"套接字提供单独的API.
现在我发现dnode声称可以同时使用它们."它适用于网络套接字,甚至可以在带有socket.io的浏览器中使用."
我需要将JSON对象(包含字符串)传递给彼此.客户端将使用JavaScript(浏览器),JavaScript(Appcelerator Titanium),C#和Java(Android)编写,但只有Java的实现.我阅读了协议,我认为实施并不容易.
在建立连接之后还有一个方法名称交换,这在我的应用程序中是一个相当大的开销,我不需要它,因为我知道我在另一方面实现了什么(它不是公共API).
有人有经验或知道其他选择吗?我不确定这是否适合我的目的,我需要实现CRUD和PUB/SUB.