小编Cas*_*ynn的帖子

基于套接字与HTTP的通信,用于移动客户端/服务器应用程序

我最近决定参与一个非常重要的软件工程项目,该项目将涉及开发基于客户端 - 服务器的应用程序.我的计划是开发尽可能多的客户端:包括原生iPhone,Android和Blackberry应用程序以及基于Web的应用程序.

对于我的服务器,我打算使用VPS(可能来自slicehost.com)运行带有MySQL数据库的Linux.我的第一个问题是客户端与服务器接口的策略应该是什么.我的想法是:

  1. 使用PHP脚本进行基于HTTP-POST或GET的通信.
    这是我非常熟悉的 - 从表单传递信息到PHP脚本,使用它并返回输出.我假设我想要将输出作为某种基于XML或JSON的字符串返回给客户端.我还假设我想为想要与我的服务器连接的客户端创建一个定义良好的API.

  2. 基于套接字的通信与PHP脚本,Java程序或C++程序
    这个我不太熟悉.我使用过基本教程来创建脚本或创建套接字的简单应用程序,监听连接并返回数据.我假设使用此方法的通信数据开销远远少于基于HTTP的方法.我的梦想是有大量并发客户端在使用,所有客户端都在使用服务器/数据库.我不确定基于HTTP/PHP脚本的简单通信设计是否可以有效扩展以满足许多客户的需求.此外,我最终可能希望将服务器推送功能发送给由各种服务器事件触发的客户端.我也不确定哪种编程语言最适合这种情况.如果效率是一个大问题,我认为PHP脚本可能效率不高?

有一种普遍接受的方式吗?对我而言,这是尝试弥合我目前的一些技能之间的差距.我在PHP方面有很多经验,并且与MySQl数据库连接以提供动态网页.我也有很多开发本机iPhone应用程序的经验(但是没有任何基于服务器的重要通信).我也使用过Java/C++,并且开发了两种与MySQL接口的语言的应用程序.

我不希望我的客户向服务器发送/从服务器接收大量数据.与给定客户端事件的一组字符串相同的东西.

另一个问题:使用VPS - 好主意?我显然不想支付一个完全专用的服务器(slicehost提供的VPS起价为每月20美元左右),而且我假设一个VPS能够满足一些初始客户端的要求.随着越来越多的用户开始与我的服务器接口,我假设它可以迁移到越来越大的"切片",并且可能最终在必要时移动到完全专用的服务器.

感谢您的建议!:)

sockets client-server communication

13
推荐指数
1
解决办法
1万
查看次数

我应该在网站上使用Javascript SDK或PHP SDK进行facebook连接

我正在建立一个网站,通过Facebook连接验证用户,我在使用PHP SDK /服务器端流程或JS SDK /客户端流程之间徘徊.

以下是一些注意事项:

  1. 我想记录在我的服务器上的数据库(用户ID,电子邮件地址)中授权我的应用程序的所有用户
  2. 我想让用户能够使用JS SDK中FB.ui()生成的有吸引力的对话框发布到他们的墙上
  3. 我希望能够通过我的服务器在用户的墙上发布故事以响应外部事件
  4. 我想根据用户当前是否登录到Facebook来启用/禁用我网站上的某些功能

还有一些我能想到的问题.但基于这些要求,我猜我将需要使用这两个SDK.但是我应该依赖哪个SDK来进行数据库中的初始应用程序授权/新用户记录?

我对这两种情况下如何工作的想法:

JS SDK:

用户选择登录按钮,回调方法向服务器发出AJAX请求,并通过post传递经过身份验证的用户的FBID.服务器上的代码确定这是否是新用户,如果没有找到现有记录则在数据库中记录+记录access_token以允许服务器端API请求.

PHP SDK:

用户被重定向到Facebook的授权页面和脚本,在Facebook将用户重定向回我的应用程序之后执行该脚本,如果找不到该用户的现有记录,则会记录新记录.但是,如果我使用服务器端流进行身份验证,JS SDK是否能够执行对API的调用?

facebook server-side client-side facebook-graph-api

13
推荐指数
2
解决办法
6244
查看次数

垃圾收集是否对这类程序的性能有害

我正在构建一个将在AWS EC2实例上生成的程序(可能)通过cron作业定期调用.该程序将"抓取"/"轮询"我们与之合作的特定网站,并将其内容编入索引/汇总并更新我们的数据库.我认为java非常适合用于编写此应用程序的语言.我们工程团队的一些成员担心java垃圾收集功能的性能损害,并建议使用C++.

这些有效的顾虑吗?这是一个可以通过cron作业每30分钟调用一次的应用程序,只要它在该时间范围内完成任务,我认为性能是可以接受的.我不确定垃圾收集是否会成为性能问题,因为我认为服务器将拥有足够的内存,并且实际跟踪有多少对象指向内存区域然后在达到0时声明内存空闲对我来说似乎不太有害.

c++ java garbage-collection memory-management

12
推荐指数
5
解决办法
436
查看次数

Codeigniter会话类w /数据库存储选项未优化?

我使用codeigniter的会话类和在数据库中存储会话数据的选项.这是为每个用户检索会话的请求运行的选择查询的示例:

SELECT *
FROM (`ci_sessions`)
WHERE `session_id` = 'f7fd61f08a229kdu3093130a3da17e14'
AND `user_agent` = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.'
Run Code Online (Sandbox Code Playgroud)

以下是用户指南中定义的会话数据的表结构:

CREATE TABLE IF NOT EXISTS  `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(16) DEFAULT '0' NOT NULL,
user_agent varchar(50) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text DEFAULT '' NOT NULL,
PRIMARY KEY (session_id)
);
Run Code Online (Sandbox Code Playgroud)

我的理解是,每当你有一个想要返回单个结果的查询时,最好使用LIMIT 0,1,这样当数据库引擎找到所需的行时,它只返回而不是继续扫描整个表以获得更多匹配.因此,将此查询写成以下内容会更有效:

SELECT *
FROM (`ci_sessions`)
WHERE `session_id` = 'f7fd61f08a229kdu3093130a3da17e14'
AND `user_agent` = 'Mozilla/5.0 (Macintosh; Intel Mac …
Run Code Online (Sandbox Code Playgroud)

php mysql codeigniter session-state

11
推荐指数
1
解决办法
832
查看次数

何时使用CMS构建网站是一个好主意还是坏主意

我即将开始一个大型的Web应用程序项目.该项目的前提是它将是一个聚合内容的目标网站(内容将通过独立运行的爬虫/机器人收集,并按照设定的时间间隔来索引已批准我们技术的合作伙伴提供的数据),并将此内容显示给用户.用户可以通过对内容进行排名来定制平台向其呈现的内容,以试图给出平台数据以确定用户可能找到哪些内容有利.(是的,我知道这听起来就像stumbleupon.com)

这个想法的创建者是非技术性的,他以前有使用wordpress开发网站的经验.因此,他的第一直觉就是要求CMS创建这个项目.我作为开发人员的直觉,具有丰富的Web开发经验,使用PHP/Codeigniter构建Web应用程序,因为CMS从未打算用于创建这样一个特定于目的的定制应用程序 - 并试图使用一个在项目中创造了许多不必要的开销/混乱.

我认为构建一个后端界面来查看/添加/编辑/删除蜘蛛收集的内容可能会更好,因为我认为这是非技术合作伙伴在此需要的唯一访问/控制类型项目.(也可能禁止用户,删除对内容的不当评论等)

但是你们怎么想?CMS可以为这样的项目提供某种价值吗?是否有一个普遍接受的规则,即CMS是好还是坏?我来自使用像codeigniter这样的框架的多年PHP应用程序,最近我不得不在wordpress网站上工作 - 这对我来说似乎是一个令人厌恶的全局变量,无穷无尽的'钩子'来获取代码执行何时/何时需要它等等.

----编辑----

我应该补充说,添加到所有这一点的预期功能是用户将能够将他们自己的内容添加到我们的聚合内容集合中.只是另一个功能让我觉得这个应用程序太"独特",无法在CMS上正确开发.

----编辑----

另一件事是可扩展性是一个大问题.我们希望建立这个能够处理每月200,000 - 2,000,000 - 20,000,000个独立访问者的任何地方.这意味着使用我们可以使用的一切,负载平衡,memcached缓存,工作进程/服务器,高可用性mysql和mongodb数据库(在我们的Web应用程序中用于不同目的),内容交付网络,独立于应用程序服务器托管资产文件我对放弃对所有代码的直接控制感到不安,因为在过去我曾用我的能力触摸所有内容来微调任何性能问题/瓶颈.

php web-applications content-management-system

10
推荐指数
1
解决办法
1821
查看次数

开源GPL Sencha Ext JS 4.0与商业

我有一个商业SaaS应用程序的想法,我想使用Sencha的Ext JS框架构建.我知道需要支付商业许可证才能转换并销售我使用ext js构建的应用程序,但我很好奇为什么在开发过程中需要支付许可证.我认为构建和测试应用程序是可行的,看看它是否可行以及是否有市场,然后在实际销售之前支付许可费.

http://www.sencha.com/products/extjs/download?page=a

    When to use the commercial version
If you’re going to build a commercial application with Sencha Products, you must write your application code under the commercial license from the beginning of the application development process.
Run Code Online (Sandbox Code Playgroud)

最重要的是,不是我打算这样做,但是如果我在没有许可证的情况下使用Ext JS开发我的应用程序然后在实际销售之前购买了一个,那么Sencha会知道吗?

open-source gpl extjs

10
推荐指数
2
解决办法
9397
查看次数

nodejs/express中的数据库会话支持

expressjs/nodejs是否支持(通过模块?)数据库会话?我来自PHP/CodeIgniter的世界,我喜欢在mysql数据库表中存储会话数据的功能.

这种方法是否与nodejs网络应用程序一起使用?

javascript database session session-cookies node.js

10
推荐指数
1
解决办法
7175
查看次数

NodeJS水平缩放

我已经成为ruby/php Web应用程序开发人员已经有一段时间了,我已经习惯了水平扩展服务器实例以处理更多请求的想法.水平扩展 - 意味着位于负载均衡器后面的应用程序的单独实例,它们不共享任何内容并且彼此不知道.

我的主要问题是,因为Node.js以及它对evented-io的重视允许运行node.js服务器的单个盒子来处理'数千个'同时发出的请求 - 是用于扩展nodejs应用程序的负载平衡/水平扩展?缩放节点应用程序仅限于垂直缩放(在问题上投入更多RAM /处理能力)?

我的第二个问题与node.js水平扩展和websockets有关.我已经看过很多使用websockets的Node.js'聊天'教程.(最喜欢的:http://martinsikora.com/nodejs-and-websocket-simple-chat-tutorial)

由于websockets有效地在浏览器和服务器之间保持开放的通信线路,因此PHP/Ruby世界中典型的水平扩展架构会导致聊天应用程序如链接中所解释的那样中断 - 因为新的websocket连接请求将是分配给不同的进程/服务器,没有一个中央资源跟踪所有连接的客户端?

scalability load-balancing websocket node.js

10
推荐指数
1
解决办法
4864
查看次数

关于将MongoDB与MySQL混合用于Web应用程序的建议

我有一个使用关系数据库(MySQL)的Web应用程序.我们正在添加一项新功能,允许某些用户从可选表单元素池中动态构建"表单",并将这些表单分发给其他用户以完成/提交.

问题在于存储完成的表单提交.每个表单可以并且将在表单元素的数量和组合方面有所不同,并且对于关系数据库,我的选项在某种程度上局限于动态创建一个新表来保存每个表单的提交(似乎是一个坏的路径)或存储每个提交的表单都作为TEXT列中的JSON(丢失了所有有用的RDBMS查询功能)

我以前从未在生产项目中实际使用MongoDB,但我认为使用我的MySQL关系数据库存储我的应用程序的某些用户创建的所有表单,然后存储所有提交的内容可能是个好主意. MongoDB,每个文档引用MySQL中表单的UUID.

我用这种方法可以想到的第一个缺点是表单提交和MySQL中的表单之间没有引用完整性.如果我在MySQL中删除一个表单,则必须手动删除所有表单提交(如果我想复制'Cascade'效果)

我是否会将单个MongoDB集合中所有表单的所有表单提交存储为单独的文档?任何意见是极大的赞赏.:)


编辑1 基于此处的文档:http://www.mongodb.org/display/DOCS/Using+a+Large+Number+of+Collections

我现在正在考虑创建一个新的集合来保存每个独特表单类型的所有提交.


编辑2

经过一些仔细考虑和其他人的建议后,我决定放弃我的双数据库方法来解决这个问题,转而采用关系数据库模式,我认为这解决了创建动态表单和保存表单提交的问题.他们很容易查询复杂报告的方式.

在此输入图像描述

基本上,"表单"中的每个记录都代表一个由用户构建的唯一表单.'forms_fields'有一个引用表单的外键和一个带有选项的枚举类型:1.复选框2. textfield 3. textarea 4.选择5.多选6.日期

'forms_fields_options'包含选择字段所具有的所有'选项'.通过这三个表,用户可以创建自定义表单.

当另一个用户填写并提交表单时,会在forms_submissions中创建一条记录.对于每个字段,将在'forms_submissions_fields'中创建相应的记录,该记录引用表单提交和forms_fields_id.最终表'forms_submissions_options_multiselect'本质上是一个连接表,用于指示用户选择的多选表单字段中的哪些选项.

mysql rdbms normalization mongodb nosql

9
推荐指数
1
解决办法
8694
查看次数

Codeigniter/PHP会话安全问题

我正在使用Codeigniter开发Web应用程序.当用户使用我的网站进行身份验证时,我当前正在将我的"用户标识符"存储在我的会话cookie中(我已启用加密).我的几个模型类使用session/cookie的'user-identifier'参数中的值来更改用户帐户的属性.

我担心的是,我想知道某人是否有可能使用我设置的用户标识符来获取有效的codeigniter-session cookie,将user-identifier的值更改为其他用户的值,然后进行更改另一个用户的帐户.如果有人试图更改会话cookie的属性,codeigniter/php会话会产生错误吗?

php session codeigniter session-cookies

8
推荐指数
1
解决办法
7301
查看次数