在使用 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 包含了端口信息所以不必加入端口号.