Статьи

Начало работы с Vert.x и Java на OS X

Vert.x — довольно новый проект, который уже достиг статуса 1.0 и имеет растущее сообщество. Согласно их веб-сайту Vert.x это: Легкая разработка асинхронных приложений для современного Интернета и предприятий. Если вы знакомы с Node.js, то, скорее всего, вы будете чувствовать себя как дома с Vert.x. Vert.x также позволяет вам использовать любимый язык, такой как Java, Ruby, Groovy или JavaScript, с поддержкой Scala и Python, которые появятся в будущем. Сегодня я расскажу об очень простой демонстрации того, как попробовать Vert.x с использованием Java.

Vert.x в настоящее время использует Apache Ant, и мне было любопытно начать использовать Vert.x, но без необходимости настройки Ant и т. Д. Ниже приведены шаги, которые я предпринял, чтобы пример WebSockets работал на моей машине с OS X без использования Ant.

Во-первых, вам нужно установить Java JDK 1.7, а это значит, что если вы используете OS X, то вам нужно запустить Lion 10.7.2+. Смотрите мой предыдущий пост о том, как установить JDK 1.7 на OS X.

В какой-то момент кажется, что артефакты Vert.x будут в Maven Central, но до тех пор вы можете скачать эти файлы здесь . После того, как вы извлекли файлы в удобном месте на жестком диске установить путь к точке в Vert.x бен папку. Мой файл .bash_profile в моем случае выглядит так:

export PATH=/Users/chad3925/vert.x-1.0.final/bin:$PATH

Из терминала вы сможете запустить следующую команду:

$ vertx version

Используя некоторый пример кода, я немного изменил его:

package com.giantflyingsaucer.websocketsexample;
 
import org.vertx.java.core.Handler;
import org.vertx.java.core.buffer.Buffer;
import org.vertx.java.core.http.HttpServerRequest;
import org.vertx.java.core.http.ServerWebSocket;
import org.vertx.java.deploy.Verticle;
 
public class WebsocketsExample extends Verticle {
 
  public void start() {
    vertx.createHttpServer().websocketHandler(new Handler<ServerWebSocket>() {
      public void handle(final ServerWebSocket ws) {
        if (ws.path.equals("/myapp")) {
          ws.dataHandler(new Handler<Buffer>() {
            public void handle(Buffer data) {
              ws.writeTextFrame(data.toString()); // Echo it back
            }
          });
        } else {
          ws.reject();
        }
      }
    }).requestHandler(new Handler<HttpServerRequest>() {
      public void handle(HttpServerRequest req) {
        if (req.path.equals("/")) req.response.sendFile("ws.html"); // Serve the html
      }
    }).listen(8080);
  }
}

Grab a copy of the ws.html file from the GitHub repo and save it to where you plan to keep your resulting compiled binaries.

I used Netbeans 7.1 to create a new Maven application called WebsocketsExample and then manually brought in the dependancies (since they are not yet on Central when this article was written). My pom.xml looks like this:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
 
  <groupId>com.giantflyingsaucer</groupId>
  <artifactId>WebsocketsExample</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>
 
  <name>WebsocketsExample</name>
  <url>http://maven.apache.org</url>
 
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
 
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.vertx</groupId>
      <artifactId>vertx-core</artifactId>
      <version>1.0.0</version>
    </dependency>
    <dependency>
      <groupId>org.vertx</groupId>
      <artifactId>vertx-platform</artifactId>
      <version>1.0.0</version>
    </dependency>
    <dependency>
      <groupId>io.netty</groupId>
      <artifactId>netty</artifactId>
      <version>3.4.2.Final</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.0.1</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-lgpl</artifactId>
      <version>1.9.7</version>
    </dependency>
  </dependencies>
</project>

Note: Not all the dependancies in the above file are required for this example, I added some for additional future experimentation.

Do a clean build on the project and then drop back into the Terminal. Depending on your setup the following will differ but this is how I ran the example:

$ vertx run com.giantflyingsaucer.websocketsexample.WebsocketsExample -cp ~/NetBeansProjects/WebsocketsExample/target/classes/

Go to the following address in a web browser that supports websockets: http://localhost:8080

At this point if all went well you should have a server running that will talk to the web browser with websockets. You can find plenty more examples including ones for Javascript, Ruby, etc. here: https://github.com/purplefox/vert.x/tree/master/src/examples

Make sure to check out the Vert.x Google Group as well as their blog. They have some initial benchmarks posted there and are quite impressive so far.