【问题标题】:Does this Scala Perl/Python architecture make sense这种 Scala Perl/Python 架构有意义吗
【发布时间】:2011-06-20 23:39:14
【问题描述】:

在另一个问题中,我为某个目的询问了“最佳”语言。意识到这个目标有点过头了,我简化了我的想法 :) 但是有非常有用的语言提示。所以我决定将 Scala 用于桌面应用程序,并在 Web 服务器上考虑 Perl 和 Python。

我想编写一些类似异步聊天的程序(有点像电子邮件)。所以你开始你的程序选择你的名字并添加一个具有他唯一 ID 的朋友。然后你可以给他写一条简单的消息,当你的朋友启动他的电脑时,启动“chat.exe”他会收到邮件(需要互联网)并且能够回答。没有特殊功能、笑脸或文本格式,只是为了学习目的而简单。

我的概念是:将 Scala 用于“chat.exe”(或者只是一个“chat.jar”可能?),它通过 SOCKET 与处理请求的 Perl/Python 框架进行通信。 所以你输入“Hello there”并点击发送。此消息通过 SOCKET 传输到 Perl/Python 脚本,该脚本读取请求并将此消息放入 MySQL 数据库。另一方面,您朋友的 chat.exe 会检查新消息,如果有,Perl/Python 脚本会传输消息。也可以通过 SOCKET。

你认为这行得通吗? SOCKET 是否合适且适合?或者也许是 REST?但我认为对于 REST 请求,您必须使用 URI (http://example.com/newmessage/user2/user3/Hi_how_are_you)。这看起来很不安全。

期待你们的cmets!

祝你有美好的一天,

库尔特

【问题讨论】:

  • 您不需要将 URI 用于 REST 请求的内容,例如您可以 POST {"sender":"user2","recipient":"user3","message":"Hi how are you"}example.com/newmessage
  • 我认为,如果你改变你的语言选择,你可能会取得更大的成功:Scala 用于服务器,Python 用于桌面应用程序。话虽如此,您可以轻松地同时使用 Scala(或任何体面的语言)。但是,坦率地说,你的问题相当模糊,很难给出任何权威的答案。
  • 为什么要使用三种语言和低级沟通渠道?
  • “需要互联网”?这是什么意思?为什么会在这里?
  • @Andrew:谢谢,我仔细看看这个! @pr1001:好的,谢谢。但我不确定我是否可以编译一个独立的 python 程序(py2exe 和 pyinstaller 看起来很不成熟)@Raphel:你会推荐什么,我感谢改进! @S.Lott 因为否则桌面应用程序无法接收来自服务器的消息

标签: python perl sockets scala client-server


【解决方案1】:

如果你问我,我认为 Scala 最适合服务器端。 Scala 在 JVM 上运行,而 Java 在服务器端有一个非常大的生态系统。您有各种各样的应用程序服务器(tomcat、jetty、glassfish 等)。

聊天是演员的经典用例。我认为Akka 可以在这方面给你启发。

您可以使用 Lift 等出色的 Scala Web 框架。您甚至可以进行基于网络的聊天。下面是一个使用 comet(服务器推送)的聊天应用程序示例:

http://demo.liftweb.net/chat

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

  1. 使用 HTTPS 与服务器通信
  2. 在您的示例中,您的意图是将消息发送到服务器(至少我是这样理解的),因此您很可能希望使用 PUT 请求,在这种情况下,消息文本将位于 POST请求正文。

【讨论】:

  • 我也想过在服务器上使用 Scala。不幸的是,我的虚拟主机计划只支持 Perl/Python/PHP(很多 P!),但我应该考虑升级。或者你知道好的替代品吗?那么使用 Actors 我可以在客户端/服务器之间进行通信吗?因为我想要一个桌面程序,而不仅仅是一个网页。谢谢!
  • @Kurt:是的,你可以使用远程演员:doc.akka.io/remote-actors-scala。关于托管...您可以免费使用code.google.com/appengine(但如果您需要更多处理能力,您应该付费),据我所知,Scala 在那里工作。你也可以看看AWS:aws.amazon.com/ec2
【解决方案2】:

将 Scala 用于“chat.exe”(或者只是一个“chat.jar”可能?)

第 1 步。弄清楚这一点。实际写一些东西,看看你能建什么。

通过 SOCKET 与处理请求的 Perl/Python 框架进行通信。

没有意义。所有互联网通信都是通过套接字完成的。留下这句话,你不会失去任何意义。

此消息通过 SOCKET 传输到 Perl/Python 脚本,该脚本读取请求并将此消息放入 MySQL 数据库。

一些有用的信息。然而,套接字是不言而喻的。

另一方面,您朋友的 chat.exe 会检查新消息,如果有,Perl/Python 脚本会传输该消息。也可以通过 SOCKET。

没错。再说一遍,套接字并不意味着什么。

在套接字之上有许多协议。 FTP、Telnet、HTTP、SMTP等等等。

第 2 步是确定您要使用的协议。顺便说一下,R​​EST 是 HTTP 的一种特殊用途。在忽略 HTTP 和 REST 之前,您应该非常非常仔细地研究它们。

这看起来很不安全

不清楚你为什么这么说。我只能猜测您不了解 HTTP 安全功能。


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

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

  2. 定义一个 Django 模型,配置默认值,以便将模型公开为一组安全的 RESTful 服务。

服务器端消息就是这样 GET、POST、PUT 和 DELETE 都由 Django、Piston 和 Django ORM 层提供。身份验证可以是多种机制中的任何一种。我是 HTTP Digest 身份验证的忠实粉丝。

【讨论】:

    【解决方案3】:

    要实现类似的东西,您可能需要通过像 ActiveMQ 这样的 MQ 系统,而不是使用普通套接字。

    【讨论】:

    • 谢谢,您对这些MQ(与消息代理相同?)系统有很好的介绍吗?库尔特
    猜你喜欢
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    相关资源
    最近更新 更多