这个Scala Perl/Python架构合理吗

0 投票
3 回答
612 浏览
提问于 2025-04-16 11:11

在我之前的一个问题中,我问了哪个语言是“最好”的,适合某个目的。后来我意识到这个目标有点太复杂了,所以我简化了我的想法 :) 不过我得到了很多有用的语言建议。因此,我决定使用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 个回答

0

要实现类似的功能,你需要使用一个消息队列系统,比如ActiveMQ,而不是直接使用普通的网络连接。

1

用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的安全特性不太了解。


一个懒惰的程序员可能会这样做。

  1. 安装Python、Django、MySQL-Python和Piston。

  2. 定义一个Django模型,配置默认设置,使得这个模型可以作为安全的RESTful服务集被访问。

这就是服务器端的基本情况,Django、Piston和Django ORM层都提供了GET、POST、PUT和DELETE等功能。身份验证可以使用多种机制。我个人比较喜欢HTTP Digest身份验证。

1

如果你问我的话,我觉得Scala最适合用在服务器端。Scala可以在JVM上运行,而Java在服务器端有一个非常庞大的生态系统。你可以找到各种各样的应用服务器,满足不同的需求(比如tomcat、jetty、glassfish等等)。

聊天是一个经典的使用场景,适合用“演员模型”。我觉得Akka在这方面能给你一些启发。

你可以使用很棒的Scala网络框架,比如Lift。你甚至可以做一个基于网页的聊天应用。这里有一个使用comet(服务器推送)的聊天应用示例:

http://demo.liftweb.net/chat

关于REST:如果你觉得它不安全,那么

  1. 使用HTTPS与服务器进行通信
  2. 在你的例子中,你的目的是把消息发送到服务器(至少我是这么理解的),所以你很可能想使用PUT请求,在这种情况下,消息内容会放在POST请求的主体里。

撰写回答