游戏服务器与 CORS 跨域资源共享

在使用 Colyseus,尤其是 Arena 服务器时,很多新手容易遇到一个错误:
Access to XMLHttpRequest at 'http://xxx.xxx' from origin 'http://localhost' has been blocked by CORS policy.
这个错误与 CORS 有关。

CORS 是一个 W3C 标准,全称是 "跨域资源共享"(Cross-origin resource sharing)。

它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

解决这个问题的方法非常简单,在使用 Express 时加入 cors() 中间件即可。

import http from "http";

import express from "express";

import cors from "cors";

import { Server } from "colyseus";



const app = express();



app.use(cors());

app.use(express.json());



const server = http.createServer(app);

const gameServer = new Server({

  server: server

});

注意使用之前需要将 Colyseus 升级至 0.11 版本以上。
如果您本地服务器使用正常但是在移交到 Arena 时遇到 CORS 相关报错,
请确保您的客户端连接协议与地址为 wss://xxx.colyseus.in,
wss 包含了端口信息所以不必加入端口号.

新版 Colyseus 内部默认使用了上述中间件, 本主题仅作为存档保留.