这个Scala Perl/Python架构合理吗
在我之前的一个问题中,我问了哪个语言是“最好”的,适合某个目的。后来我意识到这个目标有点太复杂了,所以我简化了我的想法 :) 不过我得到了很多有用的语言建议。因此,我决定使用Scala来做桌面应用程序,而在网络服务器上考虑使用Perl或Python。
我想编写一个类似于异步聊天的程序(有点像电子邮件)。你启动程序,选择一个名字,然后用朋友的唯一ID添加他。接着你可以给他发一条简单的消息,当你的朋友启动他的电脑,运行“chat.exe”时,他就能收到这条消息(需要联网),并且可以回复。没有特别的功能,表情符号或文本格式,只是为了学习而简单。
我的概念是:用Scala来做“chat.exe”(或者可以用“chat.jar”吗?),它通过SOCKET与一个用Perl或Python写的框架进行通信,这个框架处理请求。你输入“你好”并点击发送。这条消息通过SOCKET传输到一个Perl/Python脚本,脚本读取请求并把这条消息放进MySQL数据库。你朋友的chat.exe会检查新消息,如果有新消息,Perl/Python脚本也会通过SOCKET把消息传送过去。
你觉得这样可行吗?SOCKET合适吗?还是说用REST更好?不过我觉得使用REST请求时需要用到URI(http://example.com/newmessage/user2/user3/Hi_how_are_you)。这看起来很不安全。
期待你的评论!
祝你有个愉快的一天,
Kurt
3 个回答
要实现类似的功能,你需要使用一个消息队列系统,比如ActiveMQ,而不是直接使用普通的网络连接。
用Scala来做“chat.exe”(或者说“chat.jar”也可以吗?)
第一步,先搞清楚这个。实际上写点东西,看看你能做出什么。
它通过SOCKET与一个处理请求的Perl/Python框架进行通信。
这句话没什么实际意义。所有的互联网通信都是通过socket来完成的。如果去掉这句话,意思也不会变。
这个消息通过SOCKET传输到一个Perl/Python脚本,脚本读取请求并把这个消息放入MySQL数据库。
这句话有点用。不过,socket的事情其实是显而易见的。
在另一边,你朋友的chat.exe会检查新消息,如果有新消息,Perl/Python脚本就会通过SOCKET传输这个消息。
对的,socket再次出现,但其实没什么特别的意思。
在socket之上,有很多协议,比如FTP、Telnet、HTTP、SMTP等等。
第二步是搞清楚你想用哪个协议。顺便说一下,REST是HTTP的一种特定用法。在你忽略它们之前,真的应该仔细看看HTTP和REST。
这看起来很不安全
不太明白你为什么这么说。我只能猜测你对HTTP的安全特性不太了解。
一个懒惰的程序员可能会这样做。
安装Python、Django、MySQL-Python和Piston。
定义一个Django模型,配置默认设置,使得这个模型可以作为安全的RESTful服务集被访问。
这就是服务器端的基本情况,Django、Piston和Django ORM层都提供了GET、POST、PUT和DELETE等功能。身份验证可以使用多种机制。我个人比较喜欢HTTP Digest身份验证。
如果你问我的话,我觉得Scala最适合用在服务器端。Scala可以在JVM上运行,而Java在服务器端有一个非常庞大的生态系统。你可以找到各种各样的应用服务器,满足不同的需求(比如tomcat、jetty、glassfish等等)。
聊天是一个经典的使用场景,适合用“演员模型”。我觉得Akka在这方面能给你一些启发。
你可以使用很棒的Scala网络框架,比如Lift。你甚至可以做一个基于网页的聊天应用。这里有一个使用comet(服务器推送)的聊天应用示例:
关于REST:如果你觉得它不安全,那么
- 使用HTTPS与服务器进行通信
- 在你的例子中,你的目的是把消息发送到服务器(至少我是这么理解的),所以你很可能想使用PUT请求,在这种情况下,消息内容会放在POST请求的主体里。